gpt4 book ai didi

objective-c - 在不使用自引用的情况下设置 Objective-C 类属性

转载 作者:太空狗 更新时间:2023-10-30 03:40:23 26 4
gpt4 key购买 nike

今天早上我在我正在开发的 iPhone 应用程序中遇到了崩溃,当我修复这个错误时,我很好奇这是一个问题的语法原因。

这是我简化为简单元素的代码。我正在使用 NSArray 填充 TableView 中的项目。 NSArray 是一个属性:

@interface FooViewController : UITableViewController {
NSArray *stuff;
}

@property (nonatomic, retain) NSArray *stuff;

在我的实现文件中:

@synthesize stuff;

- (void)viewDidLoad {
NSArray *arr = [[NSArray alloc] initWithObjects:@"", @"Item 1", @"Item 2",
@"Lorem", @"Ipsum", nil];
self.stuff = arr;

[arr release];
}

现在,当我第一次编写该方法时,我不小心遗漏了“self”。这导致了炸弹。虽然在测试时,它乍一看是有效的。我试过:

stuff = arr;
NSLog(@"%d", [stuff count]);

但是在其他方法中使用 stuff 遭到轰炸。现在我已经解决了这个问题,我可以在其他地方使用 [stuff count]。

那么为什么我可以在某些地方使用 stuff 而在其他地方我必须使用 self.stuff

最佳答案

当您使用 (self) 和点语法时,考虑到您定义属性 (nonatomic, retain) 的方式,NSArray (stuff) 将被保留。

如果不这样做,您仍然在进行赋值,但除了通过 alloc+init 进行的隐式保留之外,您并没有保留数组 - 您会立即释放它。

您可以通过以下方式绕过“self.stuff = arr”分配:

stuff = [arr retain];

但是既然你定义了一个属性,你显然想要使用点语法并为你调用保留。

关于objective-c - 在不使用自引用的情况下设置 Objective-C 类属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1295702/

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