ope*_*rog 14 delegates ios automatic-ref-counting performselector
ARC迁移工具在开始迁移之前拒绝接受此代码:
[self.delegate performSelector:@selector(overlayDismissed:) withObject:self afterDelay:0];
Run Code Online (Sandbox Code Playgroud)
委托被迫使用协议实现此方法,它应该工作正常:
@protocol OverlayDelegate <NSObject>
- (void)overlayDismissed:(Overlay*)overlay;
@end
@interface Overlay : UIImageView {
id<OverlayDelegate> delegate;
}
@property (nonatomic, assign) id<OverlayDelegate> delegate;
Run Code Online (Sandbox Code Playgroud)
ARC有什么问题?为什么它告诉我"没有已知的选择器实例方法'performSelector:withObject:afterDelay:'?
dtu*_*net 16
ARC并没有造成这种情况 - 它只是暴露它.该方法在NSObject上定义 - 但id不仅仅适用于NSObject(因此你必须比'id'更具体).将您的代码更改为:
@interface Overlay : UIImageView {
NSObject<OverlayDelegate> *delegate;
}
@property (nonatomic, assign) NSObject<OverlayDelegate> *delegate;
Run Code Online (Sandbox Code Playgroud)