코드 기반에서 Clang 오류를 정리하는 임무를 맡았습니다. 나는 iPhone 개발과 Objective C에 매우 익숙하지 만, 대부분의 문제는 사소한 것으로 나타났습니다.이 문제는 당황 스럽지만, 당황 스럽습니다. ZAttributedString 클래스에서 Objective-C : 'self'가 설정되지 않은 상태에서 인스턴스 변수가 사용되었지만,
는 :- (id)initWithAttributedString:(ZAttributedString *)attr {
NSParameterAssert(attr != nil);
if ((self = [super init])) {
_buffer = [attr->_buffer mutableCopy];
_attributes = [[NSMutableArray alloc] initWithArray:attr->_attributes copyItems:YES];
}
return self;
}
그 소리 경고 '자체가' '[슈퍼 또는 자체] 초기화 ...]'의 결과로 설정되지 않은 상태에서 인스턴스 변수가 함께 사용 "입니다 ATTR의 _buffer 속성의 역 참조가 강조되고
도움이된다면
이 경고는이 방법에서 호출 할 때 문제가 발견 언급하는 것 같다.- (id)copyWithZone(NSZone *)zone {
return [(ZAttributedString *)[ZAttributedString allocWithZone:zone] initWithAttributedString:self];
}
수 아무에게도 결함이 정확히 무엇인지 설명해 주시겠습니까?
TIA!
사실,이 코드는'ZAttributedString' 클래스에서 가져온 것이므로 같은 클래스의 다른 인스턴스에서 ivars에 액세스하려면'-> '를 사용하는 것이 딱 맞습니다. 기본적으로 "복사 생성자"를 만들 때 이러한 코드에 적합합니다. – rmaddy
이 경우에도 실제로는 정확하지 않습니다. * 그것이'-copy' 메소드 자체라면 * 아마도 * (ObjC의 역사에서 정말 거친 부분이라 할지라도 - NSCopyObject()는 고통을 끝내지 않았다). 하지만 DI에는 없습니다. 클래스는 게이 터에 무언가를하는 논리를 가질 수 있으며 인바운드 인스턴스는 동작을 알 수없는 하위 클래스 일 가능성이 큽니다. – bbum
@bbum : "들어오는 attr은 ZAttributedString 인스턴스 또는 하위 클래스의 인스턴스 일 수 있습니다."self "는 하위 클래스의 인스턴스 일 수도 있으므로이 인수로 인스턴스 변수에 액세스 할 수 없으며 이는 사실이 아닙니다. – user102008