Objective-C NSString自动释放问题

时间:2012-07-18 00:07:12

标签: objective-c cocoa

我花了最后两个小时抨击我的额头对着我的代码,试图找出它的错误。我最终把它缩小到一对线。

NSArray *components = [string componentsSeparatedByString:@" "];

if ([components count] > 1){                        
    retainedProperty1 = [header objectAtIndex:0];

    retainedProperty2 = [header objectAtIndex:1];
}

每当我在执行延迟后尝试访问其中任何一个字段时(我正在使用CocoaAsyncSocket,它会在第二次读取套接字时拉入此对象所需的其余数据),他们都会变成僵尸。我只是想知道为什么会发生这种情况?

1 个答案:

答案 0 :(得分:5)

你对自己撒谎。你说的是retainedProperty1 = ...,但你实际上是在分配给ivar,而不是财产。除非您使用ARC(并且您不是或者您不会遇到此问题),否则这不会进行任何内存管理。它甚至不会释放这个伊娃的先前价值。你应该说

self.retainedProperty1 = ...
self.retainedProperty2 = ...