Objective-C 2.0中的属性是否需要声明相应的实例变量?例如,我习惯做这样的事情:
MyObject.h
@interface MyObject : NSObject {
NSString *name;
}
@property (nonatomic, retain) NSString *name;
@end
Run Code Online (Sandbox Code Playgroud)
MyObject.m
@implementation
@synthesize name;
@end
Run Code Online (Sandbox Code Playgroud)
但是,如果我这样做了:
MyObject.h
@interface MyObject : NSObject {
}
@property (nonatomic, retain) NSString *name;
@end
Run Code Online (Sandbox Code Playgroud)
这仍然有效吗?它与我之前的例子有什么不同吗?
在Apple的Objective-C编程中,关于封装数据的部分指出:
您可以定义没有属性的实例变量
最好在需要跟踪值或其他对象时在对象上使用属性.
换句话说,他们强烈建议您使用私有属性而不是实例变量用于任何私有对象状态.
我想知道为什么会这样呢?我知道属性具有KVO和属性(强,弱......)等功能,但在很多情况下我不需要这些功能,实例变量也可以正常工作.
实例变量可能不被视为最佳实践有什么好的理由吗?