将指针设置为nil,objective-c

我对指针内存是编程新手感到困惑。 所以我添加一个UIBarButtonItem基于何时选择UITabBarController,如下所示:

NSMutableArray *barItems = [[self.MainToolbar items] mutableCopy]; if (_sortButton == nil) { _sortButton = [[UIBarButtonItem alloc] initWithTitle:@"Sort" style:UIBarButtonItemStyleBordered target:self action:@selector(sortButtonPressed:)]; [barItems insertObject:_sortButton atIndex:0]; [self.MainToolbar setItems:barItems]; [_sortButton release]; } 

我尝试通过检查_sortButton是否为n来删除UIBarButton:

  if (_sortButton != nil) { // self.SortButton = nil; // I NEEDED THIS NSMutableArray *barItems = [[self.MainToolbar items] mutableCopy]; [barItems removeObjectAtIndex:0]; [self.MainToolbar setItems:barItems]; } 

直到我添加注释行self.SortButton = nil才行。 有人可以解释一下吗? 我想如果我从数组中删除了_sortButton,它将是未初始化的,但我想这是错误的。 除非你把它设置为nil,它似乎仍然在内存中有它的引用。 那是对的吗? 谢谢。

这是经典的悬空指针问题。

如果你没有指出一个指针,它仍指向一个内存中的地址,它可能实际上可能包含你想要的内容,除非你确保在指针的生命周期内,该对象是实时的。

我在这方面帮助我做的一件事是在我释放它们时将所有拥有的指针设置为nil

这是一个确定方便的宏:

 #define RELEASE_NIL(obj) [obj release], obj = nil