gpt4 book ai didi

iphone - 将@property 和@synthesize 与ivar 隐式创建结合使用

转载 作者:太空狗 更新时间:2023-10-30 03:41:44 26 4
gpt4 key购买 nike

好吧,最近我养成了用 @property 声明我的类属性的坏习惯,用 @synthesize 创建 getter 和 setter 并在我需要的任何地方使用它们作为 self.name 而无需引用内部 ivar(让 @synthesize 完成它的工作)

现在,当然这不允许我访问内部 ivar(例如 name_),但从我目前编写的代码来看,我并不真的需要它。对于只读属性,我不使用 @synthesize 而是自己实现 getter。

一切似乎都很好,但不知何故我觉得这是不对的,因为我看过的所有开源库都声明了 ivar 并在整个代码中使用了它。 @property + @synthesize 没有ivar绝对是懒惰的选择,但有什么缺点呢?有人可以给我一些建议吗?

另外,我读过,作为一般性建议,可以在类代码中的任何地方使用 self.propertyNamedeallocinit 除外 方法。但只要您确保对象已初始化:

-(id) init
{
if( (self=[super init] )) {

}
return self;
}

并且在调用 [super dealloc] 之前删除所有键值观察器,一切都应该没问题。对吧?

最佳答案

@synthesize 将创建与属性同名的内部 ivar:

@synthesize name;

- (void) dealloc {
[name release], name = nil;
[super dealloc]
}

或者给内部ivar起一个别的名字:

@synthesize name = _name;

- (void) dealloc {
[_name release], _name = nil;
[super dealloc]
}

我在 init 中使用了 self.name,但在 dealloc 中没有使用,而且似乎工作得很好。

关于iphone - 将@property 和@synthesize 与ivar 隐式创建结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6912188/

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