Ios 在目标C中使用弱引用时访问错误
我的应用程序有问题。在类中,我声明了一个弱委托属性:Ios 在目标C中使用弱引用时访问错误,ios,objective-c,xcode,delegates,Ios,Objective C,Xcode,Delegates,我的应用程序有问题。在类中,我声明了一个弱委托属性: @interface FeedManager : NSObject @property (nonatomic, assign) id<FeedDelegate> delegate; ... @end 我看到这导致了if行中的运行时崩溃 崩溃:com.apple.main-thread EXC\u错误\u访问内核\u无效\u地址 所以我认为它试图访问解除分配的委托,所以我添加了一个空检查以避免它 if(self.delegat
@interface FeedManager : NSObject
@property (nonatomic, assign) id<FeedDelegate> delegate;
...
@end
我看到这导致了if
行中的运行时崩溃
崩溃:com.apple.main-thread
EXC\u错误\u访问内核\u无效\u地址
所以我认为它试图访问解除分配的委托,所以我添加了一个空检查以避免它
if(self.delegate &&[self.delegate respondsToSelector:@selector(getViewController)])
但它仍然因为同样的错误而崩溃。如何避免该运行时错误?更改您的委托属性
@属性(非原子,赋值)id委托代码>
进入
@属性(非原子,弱)id委托代码>
这指定当前类的对象具有可以是任何类型的委托。弱说明符对于委托对象很常见,因为它意味着具有委托的对象不会增加委托的引用计数(在ARC中称为“保持对它的强引用”)。弱代表参考是标准做法
如果您将respondsToSelector
方法发送到nil,这将不会在我的经验中导致任何崩溃这不是一个弱引用,因为我们通常在Cocoa中使用该术语,这就是问题所在。Getter方法]s不应以“get”作为前缀。
if(self.delegate &&[self.delegate respondsToSelector:@selector(getViewController)])