gpt4 book ai didi

objective-c - 他们为什么要这样初始化指针?

转载 作者:搜寻专家 更新时间:2023-10-30 19:55:51 25 4
gpt4 key购买 nike

在几乎所有我读过的书和我看过的例子中,我都看到指针是这样初始化的。假设我有一个要初始化的类变量 NSString *myString 。我几乎总是会看到这样做的方式:

-(id)init {
if (self = [super init]) {
NSString *tempString = [[NSString alloc] init];
self.myString = tempString;
[tempString release];
}
return self;
}

为什么我不能只执行以下操作?

-(id)init {
if (self = [super init]) {
self.myString = [[NSString alloc] init];
}
return self;
}

我不明白为什么一开始就需要额外的 tempString,但我可能会遗漏一些内存管理方面的东西。我想做事的方式是否可以接受,还是会导致某种泄漏?我已经阅读了 developer.apple.com 上的内存管理指南,除非我只是遗漏了什么,否则我看不出有什么不同。

最佳答案

如果self.myString是一个保留的属性,第二个例子必须是

-(id)init { 
if (self = [super init]) {
self.myString = [[[NSString alloc] init] autorelease];
}
return self;
}

否则它会泄漏。我只能假设是这种情况,第一个示例只是想避免使用 autorelease

关于objective-c - 他们为什么要这样初始化指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2765396/

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