iPh*_*her 3 cocoa reference-counting objective-c
我只是写了一些探索性代码来巩固我对Objective-C的理解,我遇到了这个我不太了解的例子.我定义了这个方法并运行代码:
- (NSString *)stringMethod
{
    NSString *stringPointer = [[NSString alloc] initWithFormat:@"string inside stringPointer"];
    [stringPointer release];
    [stringPointer release];
    NSLog(@"retain count of stringPointer is %i", [stringPointer retainCount]);
    return stringPointer;
}
运行代码并调用此方法后,我注意到一些事情:
通常情况下,如果我尝试在达到零保留计数后访问被认为已解除分配的内容,则会出现EXC_BAD_ACCESS错误.在这里,我得到了malloc"双重免费"错误.这是为什么?
无论我添加多少行"[stringPointer release]",NSLog报告保留计数为1.当我添加更多版本时,我只会得到更多"双重免费"错误.为什么发布语句不能按预期工作?
虽然我已经过度发布了stringPointer并且我收到了一堆"双重免费"错误,但返回值仍然可以正常工作(我在主代码中有另一个报告返回值的NSLog).该程序继续正常运行.再一次,有人可以解释为什么会这样吗?
这些例子相当简单,但我试图全面掌握正在发生的事情.谢谢!
您将获得双重自由错误,因为您正在释放两次并导致两个dealloc消息.= P
请记住,仅仅因为您发布并不意味着其内存地址的数据立即被销毁.它只被标记为未使用,因此内核知道,在将来的某个时刻,它可以自由地用于另一个数据.在此之前(在您的应用空间中完全不确定),数据将保留在那里.
所以再次说明:释放(和dealloc'ing)并不需要在字节级别立即销毁数据.它只是内核的标记.
| 归档时间: | 
 | 
| 查看次数: | 740 次 | 
| 最近记录: |