重写Objective-C中的合成属性是否正确?
我已重写合成属性,因为我想添加NSAssert 这是否可以执行(即覆盖)或被视为不良做法重写Objective-C中的合成属性是否正确?,objective-c,synthesize,Objective C,Synthesize,我已重写合成属性,因为我想添加NSAssert 这是否可以执行(即覆盖)或被视为不良做法 @synthesize someField; -(NSString*)someField { NSAssert(someField != nil,@"someField"); return someField; } 那很好。从: 您可以使用@synthesis关键字 告诉编译器它应该 合成setter和/或getter 如果不使用,则为属性指定方法 在@implementation中提供
@synthesize someField;
-(NSString*)someField {
NSAssert(someField != nil,@"someField");
return someField;
}
那很好。从:
您可以使用@synthesis关键字
告诉编译器它应该
合成setter和/或getter
如果不使用,则为属性指定方法
在@implementation中提供它们
街区
因此,如果您提供了它们,那么编译器将使用您的,而不考虑@synthesis指令。您为什么要这样做?在现代(64位和iOS)运行时中,这是一种创建IVAR的简便方法。我想你说的是隐式定义的IVAR,这是一个完全不同的概念。提供自己的setter和getter有很多原因,比如永久存储、数据库访问、缓存等;我的评论毫无意义。谢谢你为后代指出这一点。(说真的!):)