我只将一个变量(即 NSString)声明为@property 和@synthesize,我从未在接口类中声明它,示例如下:
.h 文件:
@interface myViewController : UIViewController {
}
@property (nonatomic,retain) NSString *text;
它对我来说很好,所以我应该在 myViewController 类中声明它吗?为什么?
PS ARC 已启用。
我只将一个变量(即 NSString)声明为@property 和@synthesize,我从未在接口类中声明它,示例如下:
.h 文件:
@interface myViewController : UIViewController {
}
@property (nonatomic,retain) NSString *text;
它对我来说很好,所以我应该在 myViewController 类中声明它吗?为什么?
PS ARC 已启用。
声明变量而不是属性没有具体原因(声明两者都是无用的)。
我倾向于像你一样只声明属性,因为我认为直接在实现中操作实例变量的坏习惯(像init
方法这样的罕见例外)并且我喜欢使用 getter 和 setter。
此外,属性具有在行为方面易于定制的巨大优势:处理线程安全、可见性和内存管理只是几个关键字的问题。
你的意思是在 .m 文件的接口部分?
UIViewController .m 文件的 interface 部分声明的属性仅供私人使用,您不能从其他类访问它,而 .h 文件的 interface 部分中声明的属性是类属性,可以从类中访问.
很久以前,你应该这样做:
@interface myViewController : UIViewController {
NSString *_text;
}
@property (nonatomic,retain) NSString *text;
@synthesize text = _text;
但现在,你可以代替它:
@interface myViewController : UIViewController {
}
@property (nonatomic,retain) NSString *text;
同样的,IDE 为你做这件事,而 Xcode4.5 的 @synthesize 属性也为你做。没有人可以告诉您应该采用哪种方式,但可以清楚地知道您想对您的代码做什么,然后用它做任何事情。