【发布时间】:2010-11-14 00:55:57
【问题描述】:
我使用的是 iPhone SDK 3.0,但我认为这是对 w/c 和内存管理的工作方式的普遍误解。
我已经像这样覆盖了 viewWillAppear 方法
@implementation MyViewController
- (void)viewWillAppear:(BOOL)animated {
NSArray *items = [NSArray arrayWithOjbects:self.searchButton, self.trashCan, nil];
[self.bottomBar setItems:items animated:YES];
}
// other stuff...
@end
当我尝试从上面的视图控制器切换并切换回来时,一切正常。
但是,我倾向于“释放”指向“items”的原始指针,因为我认为对 NSArray 的引用现在由 bottomBar 持有。 但是当我这样做(参见下面的代码)并尝试从 UIViewController 切换时,我收到内存管理错误(-[CFArray count]: message sent to deallocated instance 0xd5f530)。
- (void)viewWillAppear:(BOOL)animated {
NSArray *items = [NSArray arrayWithOjbects:self.searchButton, self.trashCan, nil];
[self.bottomBar setItems:items animated:YES];
[items release];
}
在这种情况下我是否需要不发布项目?还是我做错了什么? 显然,经验证据表明我不应该发布“项目”,但我不清楚为什么会这样。
感谢任何信息/“指针”!
【问题讨论】:
-
谢谢大家!并感谢您的链接。
标签: objective-c memory-management nsarray