如果我使用@property,是否还需要声明实例变量?

时间:2011-12-10 21:24:08

标签: iphone objective-c ipad ios5 properties

在Objective C中,您现在可以使用@property和@synthesize自动生成get和set方法。我的问题是:我还需要在界面中声明属性吗?没有它,我的程序编译并运行正常。但大多数书籍和其他例子仍然有它。为什么呢?

@interface Person : NSObject {
// do i need the declaration "NSString name;"? why?
// i have notice that my program works fine without it.
// but many programming examples still incude it.     
// NSString name;
}
@property NSString *name;
@end

@implementation Person
@synthesize name;
@end

4 个答案:

答案 0 :(得分:3)

这取决于运行时间。现代运行时在iOS中使用,您不必声明ivars。但在OS X中并非总是如此。见这里 - http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtVersionsPlatforms.html

答案 1 :(得分:1)

你所说的是伊娃。您不需要声明它,因为@synthesize会为您添加它。这并不适用于较旧的编译器(显然在@propertiy添加到语言之前),因此很多人和书籍仍在使用。

PS:如果你没有任何ivars,你也不需要{...},例如:

@interface Person : NSObject

@property NSString *name;
//...

答案 2 :(得分:0)

你不需要;将为您生成ivar。但是调试器不会显示自动生成的ivars,所以我还是要声明它们。

答案 3 :(得分:0)

您无需申报ivar。如果省略ivar,@synthesize指令会为您完成。