Objective c编译器会自动设置属性设置方法中的retain吗?

时间:2014-03-21 11:47:45

标签: objective-c

Objective C中,如果我有一个类,则在类中使用一些方法创建一个字符串,并将属性NSString指针设置为新创建的字符串。在这种情况下,因为字符串是使用便捷方法创建的,所以它将拥有一个自动释放池的所有者。当我将字符串分配给属性NSString指针时,编译器是否会通过插入保留调用将该属性设置为该字符串的所有者?

我认为应该。否则,当自动释放池耗尽时,将释放该字符串。但是,如果类的对象仍然存在于自动释放池之外,则该属性将指向已释放的内存,这会导致过早的释放问题。在这种情况下,应该有一个retain调用来将对象设置为字符串的新所有者。我是对的吗?

1 个答案:

答案 0 :(得分:0)

短语“将字符串赋值给属性NSString指针”有点模棱两可。如果将属性设置器用作方法调用或使用点语法,则将使用为属性指定或默认的内存管理。如果直接分配给基础指针,那么您将绕过属性属性,并且保留状态将保留在赋值之前的任何状态。