1 번은 컴파일러와 링커가 보는 코드의 양을 최소화하고 잠재적으로 순환 참조를 피하기 위해 MyOtherObject 클래스를 정방향 선언함으로써 다른 두 개와 다릅니다. 이렇게하면 #import를 .m 파일에 넣어야합니다.
@property를 선언하고 (및 .m에서 @synthesize와 일치) 파일을 지정하는 방식으로 처리 된 메모리 의미 체계와 함께 접근 자 메서드를 자동 생성합니다. 대부분의 객체에 대한 경험 규칙은 Retain이지만 NSStrings는 예를 들어 Copy를 사용해야합니다. Singleton과 Delegates는 일반적으로 Assign을 사용해야합니다. 손으로 쓰는 접근자는 지루하고 오류가 발생하기 쉬우므로 많은 입력 및 멍청한 버그를 줄일 수 있습니다.
또한 합성 된 속성을 선언하면 다음과 같은 점 표기법을 사용하여 접근 자 메서드를 호출 할 수 있습니다.
self.otherObj = someOtherNewObject;
MyOtherObject *thingee = self.otherObj;
일반적인 메시지 전달 방식 대신 :
[self setOtherObject:someOtherNewObject];
MyOtherObject *thingee = [self otherObj];
이면에서 실제로 다음과 같은 메서드를 호출합니다.
- (void) setOtherObj:(MyOtherObject *)anOtherObject {
if (otherObject == anOtherObject) {
return;
}
MyOtherObject *oldOtherObject = otherObject;
otherObject = [anOtherObject retain];
[oldOtherObject release];
}
…아니면 이거
- (MyOtherObject *) otherObject {
return otherObject;
}
엉덩이에 전체적인 통증이 있습니다. 이제 수업의 모든 ivar 에 대해 수행 하십시오. 정확하게하지 않으면 메모리 누수가 발생합니다. 컴파일러가 작업을 수행하도록하는 것이 가장 좋습니다.
나는 것을 볼 수 1 바르가 없습니다. 오타가 아니라고 가정하면 @property / @synthesize 지시문이 배후에서 ivar도 선언하므로 괜찮습니다. 나는 이것이 Mac OS X-Snow Leopard 및 iOS4의 새로운 기능이라고 생각합니다.
3 번 에는 이러한 접근자가 생성되지 않았으므로 직접 작성해야합니다. 접근 자 메서드에 부작용이 생기도록하려면 위에 표시된대로 표준 메모리 관리 댄스를 수행 한 다음 접근 자 메서드 내에서 필요한 모든 부수 작업을 수행합니다. 당신이 재산을 합성하는 경우 뿐만 아니라 자신을 작성할 때 , 다음 당신의 버전이 우선합니다.
내가 모든 걸 다뤘나요?