ARC迁移工具在开始迁移之前拒绝接受此代码:
[self.delegate performSelector:@selector(overlaydismissed:) withObject:self afterDelay:0];
委托人被迫使用协议实现这个方法,它应该可以正常工作:
@protocol OverlayDelegate <NSObject> - (void)overlaydismissed:(Overlay*)overlay; @end @interface Overlay : UIImageView { id<OverlayDelegate> delegate; } @property (nonatomic,assign) id<OverlayDelegate> delegate;
ARC有什么问题?为什么告诉我有没有已知的选择器实例方法performSelector:withObject:afterDelay:’?
解决方法
ARC不是造成这种 – 它只是暴露它.该方法在NSObject上定义,但是id不仅仅适用于NSObject(所以你必须比仅仅’id’更具体).将您的代码更改为:
@interface Overlay : UIImageView { NSObject<OverlayDelegate> *delegate; } @property (nonatomic,assign) NSObject<OverlayDelegate> *delegate;