[英]BAD_ACCESS when using a weak reference in Objective C
我的應用程序出現問題。 在一個類中,我聲明了一個弱的委托屬性:
@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;
這指定當前類的對象具有可以是任何類型的委托。 弱指定符對於委托對象是常見的,因為這意味着具有委托的對象不會增加委托的引用計數(在ARC中,請說“保持對其的強烈引用”)。 較弱的委托人引用是標准做法。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.