【发布时间】:2015-04-24 05:44:02
【问题描述】:
第一张图是用self.name改的,第二张图是用_name改的,应该是一样的结果,但是第二张什么也没输出,为什么?
这里是代码
#import "ViewController.h"
@interface kvo : NSObject
@property (nonatomic,strong) NSString *name;
@end
@implementation kvo
- (void)change
{
_name = @"b";
}
@end
@interface ViewController ()
@property (nonatomic, strong) kvo *a1;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.a1 = [[kvo alloc] init];
_a1.name = @"a";
[self.a1 addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionNew context:nil];
[_a1 change];
}
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
NSLog(@"1");
}
区别是self.name和_name在change方法中
编辑:这与“Objective-C 中的 _variable 和 self.variable 有什么区别?[重复]”不是同一个问题,我知道这是关于 getter 方法和 setter 方法,我的问题是为什么 setter 方法触发 KVO,_name = @"b" 不触发 KVO。
【问题讨论】:
-
请将代码发布为文本,而不是 xcode 屏幕截图。文本更容易剪切/粘贴或处理。
-
阿伦,我认为这是另一个问题。
-
通过使用
_name你绕过了kvo
标签: ios objective-c swift key-value-observing