我有一个 UIViewController。在 UIViewController 的顶部,我声明了
NSMutableArray *contacts;
在我的 viewDidLoad
方法中,我调用了 [self getContacts]
,它基本上初始化了我的 contacts
数组。它首先初始化数组,然后添加一些对象:
if(contacts == nil)
contacts = [[NSMutableArray alloc] init];
[contacts removeAllObjects];
[contacts addObjectsFromArray:[some objects]];
因此,现在我的联系人
已初始化。在我的 viewDidLoad 方法中,我什至使用了 contacts
,而且效果很好。稍后,在一种方法中,我需要检索 contacts
的元素,但是我得到了 EXC_BAD_ACCESS。为什么是这样?为什么我的 contacts
数组没有保留我一开始用它初始化的对象,我该如何解决这个问题?
编辑:
当我选择 NavigationBarItem 然后触发方法 buttonWasPressed
时出现错误。在那个方法中,我只有以下内容:
-(void)buttonWasPressed:(id)sender {
NSLog(@"button was pressed");
if(contacts == nil)
NSLog(@"contacts is nil!");
NSLog(@"contacts = %@",contacts);
}
我看到打印了“按钮被按下”,但随后出现了 EXEC_BAD_ACCESS。
最佳答案
这段代码看起来不错,没有错。我猜你在其他地方过度释放了。打开 Zombies - 在可执行参数中将 NSZombieEnabled 添加到 YES,它会在行上中断,这样你就可以看到哪个对象被过度释放了。
关于iphone - Objective-C内存管理问题,NSMutableArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6307559/