我的应用内有问题。在类中,我声明了一个弱委托属性:
@interface FeedManager : NSObject
@property (nonatomic, assign) id<FeedDelegate> delegate;
...
@end
FeedDelegate定义方法-getViewController
在实现中,在给定的回调中,我试图调用委托:
@implementation FeedManager
...
-(void) presentUpdates {
if([self.delegate respondsToSelector:@selector(getViewController)]) {
//Do stuff
}
}
...
}
我看到这导致if
行中的运行时崩溃
崩溃:com.apple.main-thread
EXC_BAD_ACCESS KERN_INVALID_ADDRESS
所以我认为它试图访问已释放的委托,所以我添加了一个空检查以避免它
if(self.delegate &&[self.delegate respondsToSelector:@selector(getViewController)])
但它仍然因同样的错误而崩溃。如何避免运行时错误?
答案 0 :(得分:1)
更改您的委托属性
@property (nonatomic, assign) id<FeedDelegate> delegate;
进入
@property (nonatomic, weak) id<FeedDelegate> delegate;
这指定当前类的对象具有可以是任何类型的委托。弱说明符对于委托对象是通用的,因为它意味着具有委托的对象不会增加委托的引用计数(在ARC中说“保留它的强引用”)。弱代表参考是标准做法。