将自动释放的对象分配给强对象

时间:2014-12-08 11:23:09

标签: ios objective-c automatic-ref-counting

假设我有一个带有成员变量“myDictionary”的A类。

现在,如果我这样做:

myDictionary = [NSDictionary dictionary];

我知道默认情况下,类的成员属于强类型。所以myDictionary将在A类对象的生命周期中可用。这就是我对ARC的理解。

但是我在myDictionary上得到EXE_BAC_ACCESS这真让我感到困惑。我是否需要做额外的事情才能避免myDictionary上的EXE_BAD_EXCESS?因为上面的方法返回一个自动释放的对象。

先谢谢。

2 个答案:

答案 0 :(得分:0)

  

如果您不使用ARC,那么您应该在任何时候使用+字典   需要一个自动释放的字典,并在你需要的时候+ alloc / init   你要坚持的字典(例如,把它放在一个   ivar),或者如果你只是想避免自动释放和    - 手动发布。

所以尝试这样实现:

myDictionary = [[NSDictionary alloc] init];

答案 1 :(得分:0)

此处最可能的错误是从多个线程访问myDictionary。确保您始终正确访问ivar是您应始终将您的属性称为self.myDictionary而不是直接引用_myDictionary ivar的几个原因之一。当您需要使此线程安全时,这将确保您只需要一个地方来修复代码。

还有其他可能的方法来解决此错误,例如CFBridging...函数的错误处理,但最常见的是多线程访问。