我的应用程序中有问题。在课程中,我声明了一个薄弱的代表财产:
@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)])
,但它仍在同样的错误中崩溃。如何避免运行时错误?
更改您的委托属性
@property (nonatomic, assign) id<FeedDelegate> delegate;
进入
@property (nonatomic, weak) id<FeedDelegate> delegate;
这表明当前类的对象具有任何类型的委托。对于委托对象而言,弱规范符是常见的,因为这意味着与代表的对象不会增加代表的参考计数(以"保持强有力的参考")。较弱的代表参考是标准实践。