ios - 왜 일부 책에서는 초기화 방법과 dealloc 방법이 항상 인스턴스 변수를 통해 데이터를 읽고 써야 한다고 말하는 이유가 무엇입니까?
我想大声告诉你
我想大声告诉你 2017-05-17 10:05:31
0
1
1062

Effective Objective -c2.0 이 책에서는 초기화 방식과 Dealloc 방식에서는 항상 인스턴스 변수를 통해 데이터를 읽고 써야 한다고 나와 있는데, 한참을 읽어도 그 이유를 모르겠습니다. 이 책을 읽어본 사람이 있나요?

我想大声告诉你
我想大声告诉你

모든 응답(1)
黄舟

책에 아주 명확하지 않나요:

  • _name = @"Jack" setter를 통해 메시지를 보내지 않고 변수에 직접 값을 할당하는 것이 빠릅니다. _name = @"Jack" 不经过setter的消息发送,直接为变量赋值,速度快。

  • 对于以下的 name 属性:

@property (nonatomic, copy) NSString *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와 동일하지 않을 수 있습니다. . #🎜🎜# #🎜🎜# 무엇에 대해 불분명한지 이해가 되지 않아 제 생각을 토대로 간략하게 설명하겠습니다. #🎜🎜#
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿