簡體   English   中英

在目標C中使用弱引用時,BAD_ACCESS

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM