gpt4 book ai didi

objective-c - 您如何提及这些内容?

转载 作者:行者123 更新时间:2023-12-03 17:33:09 24 4
gpt4 key购买 nike

谁能告诉我如何引用这些对象,第一个是系统管理对象,第二个是用户管理对象,我应该在 Objective-C/Cocoa 中使用什么术语来引用这些对象?

01

+(Planet *) planet {
gPlanetCount++;
return [[[self alloc] init] autorelease];
}

int main(int argc, const char * argv[]) {
Planet *outerMost;
outerMost = [[Planet planet] retain]; // With
...
... some code
...
[outerMost release];
[pool drain];
return 0;
}

// OR

int main(int argc, const char * argv[]) {
Planet *outerMost;
outerMost = [Planet planet]; // Without
...
... some code
...
[pool drain];
return 0;
}

02

+(Planet *) newPlanet {
gPlanetCount++;
return [[self alloc] init];
}

int main(int argc, const char * argv[]) {
Planet *outerMost;

outerMost = [Planet newPlanet];
...
... some code
...
[outerMost release];
[pool drain];
return 0;
}

EDIT_001

因此,在第一个示例中,我需要这样的内容(文本移至顶部的 01)

EDIT_002

“代码已清理,修改了下面的最终问题......”

我将选择01(考虑到这是更常用的方式)我可以再次询问有关保留/释放(即如果需要的话)的信息吗?这个通过静态分析器进行编译和运行有和没有它们吗?

加里

最佳答案

在第一个示例中,+planet 的结果是自动释放的。因此,如果调用者想要维护对结果的引用,则必须对结果调用-retain+planet 是更常见的模式(尽管 +[NSObject new] 存在,但在 Cocoa-land 中使用和 alloc/init 更常见> 对或像 +planet 这样的便捷构造函数(根据 Cocoa 内存管理规则返回一个自动释放的实例)。

在这两个示例中,+planet/+newPlanet 的结果都是 Planet 类的实例。术语上没有区别,但(正确的)第一个示例的文档可能明确指出结果是“自动释放的”,即使标准 Cocoa 内存管理约定规定结果是自动释放的。

关于objective-c - 您如何提及这些内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1736065/

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