Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 在目标C中使用弱引用时访问错误_Ios_Objective C_Xcode_Delegates - Fatal编程技术网

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)])