如果我有一个@property我不想通过ivar我支持的,我只是省略了@synthesize并且有手动的getter,它返回了一个计算值.
但是,现在自Xcode 4.4以来我没有指定@synthesizedo编译器会自动生成它.这是否意味着它还会生成一个ivar我不需要/使用它的偶数?
我最终可以通过使用强制不自动合成dynamic.然而,这将是错误的,因为@dynamic如果getter和setter在其他地方或运行时实现,则应该用于关闭警告.
我正在学习Swift编程语言,在此期间,我有时会与旧的Objective-C编程语言及其代码保持联系。
我是一个绝对的初学者,因此我有一些问题可以更好地了解“塞特犬”和“吸气剂”。
因此,我知道我可以通过.h文件中的花括号创建一个实例变量,但通常使用属性。这些属性由实例变量支持,并自动提供Getter和Setter方法。
例:
车辆.h文件:
@interface Vehicle : NSObject
@property int myProperty;
@end
Run Code Online (Sandbox Code Playgroud)
因为创建了此属性,所以不必在vehicle.m文件中声明Getter和Setter方法,因为它们是由编译器自动创建的。因此,我可以创建一个车辆对象,设置并获取值。
例
主目录
Vehicle *myvehicle = [[vehicle alloc] init];
[myvehicle myProperty] // myvehicle.myProperty
[myvehicle setMyProperty : 10] // myvehicle.myProperty = 10;
Run Code Online (Sandbox Code Playgroud)
现在,我了解到可以覆盖我创建的属性“ myProperty”的自动创建的Getter和Setter方法。在声明自己的Getter和Setter版本时,我必须在vehicle.h和vehicle.m文件中声明两个方法。在vehicle.m文件中,我没有通过使用self关键字来调用对象,而是通过使用它自动创建的实例变量(_myProperty)来调用该对象。这样对吗?
我试过了,但总是出错,我不知道为什么,重点是什么。
例
车辆.h文件:
@interface Vehicle : NSObject
@property int myProperty;
-(int) myProperty; //my new Getter method
-(void) setMyProperty: (int)updatedMyProperty; //My new Setter method
@end
Run Code Online (Sandbox Code Playgroud)
车辆.m文件:
@implementation Vehicle
-(int) myProperty {
if (! _myProperty) {
_myProperty = NO;
}
return _myProperty;
}
-(void) setMyProperty: (int)updatedMyProperty …Run Code Online (Sandbox Code Playgroud)