以前我总是看到像这样使用属性和 iVar 的例子......
SomeClass.h 内部
@interface SomeClass : NSObject {
NSString *_someString;
}
@property NSString *someString;
@end
然后在 SomeClass.m
#import "SomeClass.h"
@implementation SomeClass
@synthesize someString = _someString;
@end
最近(在 WWDC 2012 视频中)我听说我们不再需要@synthesize
,建议只使用@property
没有关联的 iVar。
所以上面会变成...
一些类.h
@interface SomeClass : NSObject
@property NSString *someString;
@end
SomeClass.m
#import "SomeClass.h"
@implementation SomeClass
@end
这只是使用@property
并且没有 ivar。这是有道理的,我一直在使用它。
但是,我也看到了一些例子......
一些类.h
@interface SomeClass : NSObject
@end
SomeClass.m
#import "SomeClass.h"
@interface SomeClass () {
NSString *someString;
}
@end
@implementation SomeClass
@end
在这方面,他们只有一个私人的iVar
,没有@property
。
那么有什么区别呢?我知道这也@property
提供了访问器方法,但您不必重写访问器方法。您可以只使用默认访问器。
那么什么时候你会使用 @property 而不是 ivar,什么时候你会只使用 ivar 而不是 a @property
?你为什么不完全摆脱 ivars 而只是使用@properties
呢?如果它们需要是私有的,那么只需在.m的接口扩展中使用它们。
快速编辑以响应有关内存管理的答案。strong
我正在使用 ARC,对我来说,使用和weak
@properties
使用 iVar 时我似乎可以更好地控制内存管理。
我希望这个问题足够清楚。
谢谢