1 - 这两个会设置不同的名为 value 的属性吗?
不,我认为您误解了 the guide 在区分 self.value 和 myInstance.value 时所说的内容。在这两种情况下,都会调用 setter 函数(即 setValue:)。
您使用 self 访问您自己的属性(即,从您编写的类的函数中引用属性)。喜欢:
@interface MyObject : NSObject
@property( nonatomic ) NSInteger value;
- (void) doSomething;
@end
@implementation MyObject
@synthesize value;
- (void) doSomething
{
self.value = 10;
}
@end
而您将使用 myInstance 从该类之外的某个其他变量中设置属性。
MyObject* anObject = [[MyObject alloc] init];
anObject.value = 10;
2 - 如果有多个实例具有名为 value 的属性,self 如何工作?
不会的。往上看。
他们还断言,“如果不使用 self.,则直接访问实例变量。”这意味着如果您使用 myInstance.value =10; 则不会调用访问器并且 KVO 不起作用。这是真的吗?
没有。 self.value 和 myInstance.value 都调用它们的访问器(setValue: 在这种情况下),并且 KVO 将工作。该断言的意思是,如果您从自己的类中访问 ivar,而不使用访问器,KVO 将无法工作。
@interface MyObject : NSObject
@property( nonatomic ) NSInteger value;
- (void) doSomething;
@end
@implementation MyObject
@synthesize value;
- (void) doSomething
{
self.value = 10; // This invokes the accessor, and KVO works.
value = 10; // This just sets the instance variable, and KVO won't work.
}
@end
使用@Property 和@Synthesize(带有垃圾回收),设置不同实例属性的正确方法是什么?自我参考有什么用?请举一个数字示例对我有帮助。
如上所示,使用实例名称。 self 仅用于访问类中的属性。上面的例子。