在目标C中使用弱参考时,BAD_ACCESS



我的应用程序中有问题。在课程中,我声明了一个薄弱的代表财产:

@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;

这表明当前类的对象具有任何类型的委托。对于委托对象而言,弱规范符是常见的,因为这意味着与代表的对象不会增加代表的参考计数(以"保持强有力的参考")。较弱的代表参考是标准实践。

最新更新