으아악
#🎜🎜#직접 할당은 _name = @"Jack";이며, self.name = @"Jack"을 전달하는 것은 실제로 _name = @"와 동일합니다. 잭 ".copy;#🎜🎜#
#🎜🎜#
#🎜🎜##🎜🎜#self.name = @"Jack"은 KVO를 트리거하지만 _name = @"Jack"은 KVO를 트리거하지 않습니다#🎜🎜#
#🎜🎜##🎜🎜#self.name = @"Jack" setter 메서드에서 중단점 디버깅을 수행할 수 있으며 값이 할당될 때마다 알 수 있습니다. #🎜🎜#
#🎜🎜#따라서 합리적인 절충안은 데이터를 읽을 때 NSString *str = _name을 사용하고 값을 할당할 때 self.name = @"Jack"을 사용하는 것입니다. #🎜🎜#
#🎜🎜# 또한 하위 클래스가 setter 메서드를 재정의할 수 있다는 점에 유의하세요. self.name = @"Jack"를 사용하는 것은 _name = @"Jack".copy와 동일하지 않을 수 있습니다. . #🎜🎜#
#🎜🎜# 무엇에 대해 불분명한지 이해가 되지 않아 제 생각을 토대로 간략하게 설명하겠습니다. #🎜🎜#
책에 아주 명확하지 않나요:
_name = @"Jack"
setter를 통해 메시지를 보내지 않고 변수에 직접 값을 할당하는 것이 빠릅니다._name = @"Jack"
不经过setter的消息发送,直接为变量赋值,速度快。对于以下的
name
属性:直接赋值是:
_name = @"Jack";
,通过self.name = @"Jack"
其实等同于_name = @"Jack".copy
;self.name = @"Jack"
会触发KVO,_name = @"Jack"
不会self.name = @"Jack"
可以在 setter 方法中进行断点调试,每次赋值你都知道。所以有一种合理折中方案就是,读取数据的时候用
NSString *str = _name
,赋值用self.name = @"Jack"
。另外需要注意的是子类可能复写setter方法,用
self.name = @"Jack"
可能不等同于_name = @"Jack".copy
다음
으아악 #🎜🎜#직접 할당은name
속성의 경우:_name = @"Jack";
이며,self.name = @"Jack"
을 전달하는 것은 실제로_name = @"와 동일합니다. 잭 ".copy
;#🎜🎜# #🎜🎜# #🎜🎜##🎜🎜#self.name = @"Jack"
은 KVO를 트리거하지만_name = @"Jack"
은 KVO를 트리거하지 않습니다#🎜🎜# #🎜🎜##🎜🎜#self.name = @"Jack"
setter 메서드에서 중단점 디버깅을 수행할 수 있으며 값이 할당될 때마다 알 수 있습니다. #🎜🎜# #🎜🎜#따라서 합리적인 절충안은 데이터를 읽을 때NSString *str = _name
을 사용하고 값을 할당할 때self.name = @"Jack"
을 사용하는 것입니다. #🎜🎜# #🎜🎜# 또한 하위 클래스가 setter 메서드를 재정의할 수 있다는 점에 유의하세요.self.name = @"Jack"
를 사용하는 것은_name = @"Jack".copy
와 동일하지 않을 수 있습니다. . #🎜🎜# #🎜🎜# 무엇에 대해 불분명한지 이해가 되지 않아 제 생각을 토대로 간략하게 설명하겠습니다. #🎜🎜#