gpt4 book ai didi

iphone - 是否需要在 alloc 语句中设置 autorelease?

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

假设以下代码,

NSString *str=[[NSString alloc] initWithString:@"sagar"];


[str autorelease];

我多次看到,大多数程序员确实更喜欢同时放置 allocinit在一个声明中。

在这里,我要求为下一条语句划分自动释放的可能性。

  • 例如,建议将init与alloc语句放在一起。autorelease 是否相同?

最佳答案

Most of the programmers do prefer to put alloc, init simultaneously within one statement.

那是因为初始化器返回的实例不一定是+alloc返回的实例。例如,这是错误的并且会使您的程序崩溃:

NSString *str = [NSString alloc];
[str initWithString:@"sagar"];

因为在这种情况下 -initWithString: 导致前一个实例的释放,而 str 最终指向一个释放的对象。这可以通过以下方式解决:

NSString *str = [NSString alloc];
str = [str initWithString:@"sagar"];

以便str 指向由-initWithString: 返回的不同实例。形式:

NSString *str = [[NSString alloc] initWithString:@"sagar"];

保证 str 指向正确的实例。


也就是说,-autorelease 是不同的。除非它被邪恶的 Sprite 覆盖,否则它总是返回接收者本身。这意味着:

NSString *str = [[NSString alloc] initWithString:@"sagar"];
str = [str autorelease];

和:

NSString *str = [[NSString alloc] initWithString:@"sagar"];
[str autorelease];

都是正确的并且以同样的方式工作。

至于区别:

NSString *str = [[[NSString alloc] initWithString:@"sagar"] autorelease];

和:

NSString *str = [[NSString alloc] initWithString:@"sagar"];

[str autorelease];

有些人更喜欢将 -autorelease 与分配一起使用,以避免稍后忘记自动释放实例。其他人更喜欢将它放在 return 语句中(如果有的话):

NSString *str = [[NSString alloc] initWithString:@"sagar"];

return [str autorelease];

使(更)明确该方法/函数返回一个自动释放的对象。

关于iphone - 是否需要在 alloc 语句中设置 autorelease?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6569667/

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