在getter 方法里邊這樣寫會不會造成崩潰?
@interface NJPerson : NSObject
@property (nonatomic, copy) NSString *name;
@end
@implementation NJPerson
- (NSString *)name
{
if (!Login) {
self.name = @"0";
NSLog(@"YES");
}
NSLog(@"NO");
return _name;
}
@end
答案一: 不會
1, 因為getter方法會編譯成如下代碼
- (NSString *)name
{
if (!Login) {
//self.name = @"0";
[self setName:@"0"];
NSLog(@"YES");
}
NSLog(@"NO");
return _name;
}
答案二: 會
1, 因為 外界會添加觀察者KVO
[person addObsever: Anyobject forKeypath: @"name"];
2, NJPerson
會有一個派生類重寫setter方法
- (void)setName:(NSString *)name {
[willChangeValueForKey: @"name" value: self.name];
self.name=name
[didChangeValueForKey: @"name" value: self.name];
}
3, 在setter 方法里邊會調(diào)用 getter 方法, 造成死循環(huán)
所以建議不要在getter方法
里邊調(diào)用setter方法
, 建議如下
- (NSString *)name
{
if (!Login) {
//self.name = @"0";
_name = @"0";
NSLog(@"YES");
}
NSLog(@"NO");
return _name;
}