声明的属性是否需要相应的实例变量?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (20)

Object-C2.0中的属性是否需要声明相应的实例变量?

MyObject.h

@interface MyObject : NSObject {
NSString *name;
}
@property (nonatomic, retain) NSString *name;
@end

MyObject.m

@implementation
@synthesize name;
@end

但是,如果我这样做了呢:

MyObject.h

@interface MyObject : NSObject {
}
@property (nonatomic, retain) NSString *name;
@end

这还有效吗?这和我之前的例子有什么不同吗?

提问于
用户回答回答于

如果使用的是现代Object-C运行时(即IOS 3.x或更高,或者64位雪豹或更高),那么您可以使用在这种情况下,需要为您的属性定义IVAR

用户回答回答于

在你的界面中,你可以在大括号之间或者通过@property大括号之外或者两者都正式声明一个实例变量。无论哪种方式,他们都成为这个班的属性。不同的是,如果你声明@property,那么你可以实现使用@synthesize,它会为你自动编写你的getter / setter

可以通过指定自己的代码来覆盖自动编码的getter / setter。这通常是与managedObjectContext懒惰加载的属性。因此,你声明你managedObjectContext的属性,但也写一个-(NSManagedObjectContext *)managedObjectContext方法

扫码关注云+社区