저는 애플에서 Your Second iOS App을 공부하고 있습니다. 이 프로젝트는 ARC를 기반으로합니다.mutableCopy가 왜 여기 있습니까?
// header
@interface BirdSightingDataController : NSObject
@property (nonatomic, copy) NSMutableArray *masterBirdSightingList;
@end
// implementation
- (void)setMasterBirdSightingList:(NSMutableArray *)newList {
if (_masterBirdSightingList != newList) {
_masterBirdSightingList = [newList mutableCopy];
}
}
- (void)initializeDefaultDataList {
NSMutableArray *sightingList = [[NSMutableArray alloc] init];
self.masterBirdSightingList = sightingList;
…
}
이 코드는 masterBirdSightingList
의 기본 setter 메소드를 오버라이드 이유를 모르겠어요 :
그리고 예를 공부하는 동안, 나는 예에서 다음 코드에 관한 질문을했다
.masterBirdSightingList
속성의 유형은 NSMutableArray
이고 NSMutableArray
유형의 _masterBirdSightingList
인스턴스 변수에도 복사됩니다. 나는 이것이 완벽하다고 생각한다.
여기에 _masterBirdSightingList = [newList mutableCopy];
이있는 이유는 무엇입니까? 어떤 경우에 setMasterBirdSightingList:
이 NSArray
유형의 인수와 함께 호출됩니까?
그렇습니다. 정적 배열이 전달되는 경우를 고려해야합니다. masterBirdSightingList가 가변 배열로 선언되었으므로이 코드는 다른 곳에서 코드가 NSArray를 변경하려고 시도 할 때 문제를 방지합니다. – Bergasms
무엇인가요? 흥미로운 점은 호출자가 변경 가능한 배열을 setter에 전달하는 경우에도 이것이 필요하다는 것입니다. –
'copy' 플래그는 여기서 중요한가? 나는 여기에 합성 자에게 속성 접근자를 합성하는 방법을 알려주는 인상을 받고 있었고 여기서는 합성되지 않았기 때문에 ... – cHao