gpt4 book ai didi

iphone - 将指针设置为 nil,objective-c

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:57:10 24 4
gpt4 key购买 nike

我对指针内存是编程新手感到有点困惑。所以我添加一个 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 是否为 nil 来删除 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。那是正确的吗?谢谢。

最佳答案

这是经典dangling pointer问题。

如果你不清零一个指针,它仍然指向内存中的一个地址,它可能包含也可能不包含你想要的内容,除非你确保在指针的生命周期内,对象是活的。

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

这是一个肯定会派上用场的宏:

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

关于iphone - 将指针设置为 nil,objective-c,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6823394/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com