gpt4 book ai didi

iphone - retain setter 是如何用@synthesize 实现的?

转载 作者:太空狗 更新时间:2023-10-30 03:48:11 25 4
gpt4 key购买 nike

标题中有以下内容:

@property (nonatomic, retain) UIView *overlay;

在实现中:

@synthesize overlay;

然后:

UIView *tempOverlay = [[UIView alloc] initWithFrame:CGRectMake(160.0f, 70.0f, 150.0f, 310.0f)];
self.overlay = tempOverlay;
[tempOverlay release];

上面的tempOverlay 变量不是不必要的吗?我不能这样做吗:

self.overlay = [[UIView alloc] initWithFrame:CGRectMake(160.0f, 70.0f, 150.0f, 310.0f)];

最佳答案

合成的保留 setter 看起来像:

- (void)setValue: (id)newValue
{
if (value != newValue)
{
[value release];
value = newValue;
[value retain];
}
}

在你的例子中,你有两个有效的方法:

1) 创建一个临时变量,alloc/init (= retained),设置为属性,释放。

IView *tempOverlay = [[UIView alloc] initWithFrame:CGRectMake(160.0f, 70.0f, 150.0f, 310.0f)];
self.overlay = tempOverlay;
[tempOverlay release];

2) 没有临时变量,直接设置为ivar。

overlay = [[UIView alloc] initWithFrame:CGRectMake(160.0f, 70.0f, 150.0f, 310.0f)];

更新:如果您使用方法 2),则必须显式处理剩余的内存管理(不仅是保留),如果需要,可以释放它之前可能拥有的任何先前值。如果只在 init 中完成一次(例如),您可以在 dealloc 中放置一个 [overlay release];

关于iphone - retain setter 是如何用@synthesize 实现的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3924463/

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