나는 어리 석다.객관적인 C의 차이점은 self.variable과 variable assignment이다.
저는 약 3 시간 동안 메모리 누수를 추적 해 보았습니다.이 메모리 누수는 내 정신을 파괴하고 내 앱 절반을 주석 처리 한 후 다음 결론에 도달했습니다.
올바른 장소에서 다음을 제공하십시오. 나는 특히 objectice C를 경험하고 있지 않다
NSString *blah;
@property (nonatomic, retain) NSString *blah;
@synthesize blah;
-(id)initWithBlah:(NSString*)b {
self.blah = b; //this leaks
blah = b; //this does not
}
, 나는 클래스의 외부 내가 = B object.blah 호출 된 경우 이해; b를 유지하는 setter 함수를 투명하게 호출합니다. 함수 안에서 나는 self.blah = b로 설정함으로써 추정하고있다. 나는 어떤 이유로 든 두 배로 유지하고 있는가?
누군가가 내게 왜 그런지 설명 할 수 있을까요, 아니면 내가 잘못하고있는 것이 아닌지 설명해 줄 수 있습니까?
건배
아 당신을 감사합니다. 나는 어떤 이유로 인해 setter가 투명하게 코드의 일부분이 그 존재를 기억하고 파괴시에 그것을 공개적으로 해제한다는 사실을 기억하기 때문에 그것을 가정했다. 고마워, 내 문제가 해결된다. – dageshi
그건 그렇고, 관례는'NSString *'변수에'(nonatomic, retain) 대신'@property (nonatomic, copy)'를 사용하는 것입니다. retain을 사용하면 다른 객체가 속성에 변경할 수있는 문자열을 할당 한 다음 나중에 클래스에 알리지 않고 문자열의 내용을 수정할 수 있으므로 캡슐화가 중단됩니다. –