ios – 如何解决“没有已知的选择器的实例方法”performSelector:withObject:afterDelay:’“当迁移到ARC?

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;

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...