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

Objective-C 2.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

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

最佳答案

如果您使用的是 Modern Objective-C Runtime(iOS 3.x 或更高版本,或者 64 位 Snow Leopard 或更高版本),那么您确实不需要为您的属性定义 ivars在这种情况下。

当您@synthesize 属性时,ivar 实际上也会为您合成。这绕过了“脆弱的ivar”场景。您可以在 Cocoa with Love 上阅读更多相关信息

https://stackoverflow.com/questions/3074248/

相关文章:

ios - 检查 AVPlayer 的播放状态

ios - 在单行 UILabel 旁边居中 NSTextAttachment 图像

iphone - 关闭呈现的 View Controller

ios - 设置 UILabel 行距

objective-c - iOS - 如何以编程方式设置 UISwitch

ios - UICollectionViewCell 上的长按手势

ios - "From View Controller"使用 UIViewControllerCon

objective-c - iOS8 - 约束含糊地暗示高度为零

iphone - Xcode 4.5 Storyboard 'Exit'

iphone - Objective-C/Cocoa Touch 中的 HTML 字符解码