iOS는 개체 내에서 가능한 인스턴스 변수에 직접 액세스
사실 저는 여러분들이 실례 변수를 읽을 때 직접 방문하는 형식을 사용하고 실례 변수를 설정할 때 속성을 통해 하는 것을 강력히 권장합니다.다음 범주를 살펴보십시오.
@interface WGPerson : NSObject
@property (nonatomic, copy) NSString *firstName;
@property (nonatomic, copy) NSString *lastName;
- (NSString *)fullName;
- (void)setFullName:(NSString *)fullName;
@end
fullName 및 setFullName 두 가지 편리한 방법은 다음과 같습니다.
- (NSString *)fullName {
return [NSString stringWithFormat:@"%@, %@", self.firstName, self.lastName];
}
- (void)setFullName:(NSString *)fullName {
NSArray *components = [fullName componentsSeparateByString:@" "];
self.firstName = components[0];
self.lastName = components[1];
}
fullName 가져오기 방법의 설정 방법에서, 우리는 '점 문법' 을 사용하여 접근 방법을 통해 관련 실례 변수에 접근합니다.이제 두 가지 방법을 재작성하여 액세스 방법 없이 인스턴스 변수에 직접 액세스하는 것으로 가정합니다.
- (NSString *)fullName {
return [NSString stringWithFormat:@"%@, %@", _firstName, _lastName];
}
- (void)setFullName:(NSString *)fullName {
NSArray *components = [fullName componentsSeparateByString:@" "];
_firstName = components[0];
_lastName = components[1];
}
이 두 가지 쓰기 방법은 몇 가지 차이가 있다.
4
4
4
4
이렇게 많이 말했는데 사실은 합리적인 절충 방법이 있다. 실례 변수를 쓸 때는 '설정 방법' 을 통해 하고, 실례 변수를 읽을 때는 직접 접근한다.이 방법은 읽기 작업 속도를 높일 뿐만 아니라 속성에 대한 쓰기 작업도 제어할 수 있다."설정 방법"을 통해 실례 변수를 써야 하는 이유입니다.가장 중요한 이유는 이렇게 하면 관련 속성의'메모리 관리의 의미'가 관철될 수 있다는 데 있다.그러나 이러한 방법을 사용하려면 몇 가지 문제에 주의해야 한다.
초기화 방법에서 속성 값을 어떻게 설정해야 합니까?이런 상황을 종합하여 서술하려면 반드시 실례 변수에 직접 접근해야 한다.하위 클래스는'덮어쓰기'설정 방법을 사용할 수 있기 때문에 WGPerson에 WGSmithPerson이라는 하위 클래스가 있다고 가정하면 이 하위 클래스는'Smith'라는 성을 가진 사람을 전문적으로 나타낸다. 이 하위 클래스는lastName 속성에 대응하는 설정 방법을 덮어쓸 수 있다.
-(void)setLastName:(NSString *)lastName {
[super setLastName:lastName];
if(![lastName isEqualToString:@"Smith"]) {
[NSException raise:NSInvalidArgumentException format:@"Last name must be Smith"];
}
기본 클래스 WGperson의 기본 초기화 방법에서는 성을 빈 문자열로 설정할 수 있습니다. 이때 '설정 방법' 을 통해 사용하면 하위 클래스의 설정 방법으로 이상을 던질 수 있습니다. 그러나 일부 경우 초기화 방법에서 설정 방법을 사용해야 합니다. 초기화할 실례 변수가 초클래스에 표시되고 하위 클래스에서 이 실례 변수에 직접 접근할 수 없으면그럼 "설정 방법"을 호출해야 합니다.
또 하나는 '타성 초기화' (게으름 피우기) 다.이 경우 "획득 방법"을 통해 속성에 접근해야 합니다.그렇지 않으면 실례 변수는 영원히 초기화할 수 없습니다.요약:
대상에서 데이터를 읽을 때는 실례 변수를 통해 읽어야 하고, 데이터를 쓸 때는 속성을 통해 써야 한다.초기화 방법과 dealloc 방법에서는 항상 실례 변수를 통해 데이터를 직접 읽어야 한다. (일부 특수한 하위 클래스를 제외하고는)때때로 불활성 초기화 기술로 데이터를 설정하는데 이런 경우 속성을 통해 데이터를 읽어야 한다.
Effective Objective-C 2.0 읽음
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.