gpt4 book ai didi

objective-c - 可以在 Objective C 中调用属性的释放吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:52:06 25 4
gpt4 key购买 nike

我最近一直在自学 Objective C,并注意到以下模式在教程和示例代码(包括来自 Apple 网站的示例)中大量使用。

UIView *myUiView = [[UIView alloc] init];
self.uiView = myUiView;
[myUiView release];

虽然我只是想知道,创建一个新变量似乎有点浪费,只是为了设置一个属性。我也看到过使用以下模式,但据我所知,在 iOS 设备上使用自动释放被认为是不好的形式,因为自动释放池占用了相当多的开销,这在移动设备上可能不太好

self.uiView = [[[UIView alloc] init] autorelease];

我最近一直在尝试使用以下模式,它设置属性,然后调用属性的释放(以减少属性本身的引用计数器)。

self.uiView = [[UIView alloc] init];
[self.uiView release];

我已经设法在几个 ViewController 上使用它,没有任何不良影响,但这是有效的代码,还是我遗漏了一些东西,这使它成为一个坏主意?

最佳答案

属性 getter 是一个方法,它不必返回一个 ivar,它实际上可以在任何地方获得它的返回值,所以你可以释放它,但它可能已经是一个自动释放的值。如果是这样,那你就有麻烦了。

IOW,如果属性 getter 会做类似的事情(不常见,但可能且有效):

- (NSString *) helloString
{
return [[myStringIVar copy] autorelease];
}

而你这样做:

[self.helloString release];

那么你在两个方面都失败了:

  • 你没有发布你想发布的ivar
  • 你释放一个自动释放的对象

IMO,最好直接发布ivar:

[myStringIVar release];

关于objective-c - 可以在 Objective C 中调用属性的释放吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7269063/

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