2012-05-02 1 views
0

는,이 같은 문자열 값을 할당 이제 OK입니다 :ARC를 사용하여 Objective C에서 문자열 값을 할당하는 방법은 무엇입니까? ARC를 사용

self.userName = [[NSString alloc] initWithString:self.currentParsedCharacterData]; 

을 또는 정지 따라서 다음과 같이 할당 나를 필요로 메모리 누수가 발생할 않습니다 :

NSString *tmpString = [[NSString alloc] initWithString:self.currentParsedCharacterData]; 
self.userName = tmpString; 
+0

WWDC 2011 세션 323을 참조하십시오. 여기에 답변 할 수있을 것보다 ARC를 훨씬 완벽하게 설명합니다. –

답변

2

첫 번째 스 니펫은 ARC에서 잘 작동하며 두 가지 방법 중 더 좋습니다.

- (void)contrived { 
    Person *aPerson = [[Person alloc] init]; 
    [aPerson setFirstName:@"William"]; 
    [aPerson setLastName:@"Dudney"]; 
    [aPerson setYearOfBirth:[[NSNumber alloc] initWithInteger:2011]]; 
    NSLog(@"aPerson: %@", aPerson); 
} 

을 다음과 같이 말한다 : 애플은 Transitioning to ARC 가이드에서이 같은 예제가

ARC는 Person이나 NSNumber 객체가 유출되지하지도 있도록 메모리 관리를한다.

alloc 에드 NSNumber 가진 setYearOfBirth: 메시지가 조각에 해당합니다.

컴파일러는 첫 번째 경우에 aPerson이 범위를 벗어나서 그 일이 발생하기 전에 해제되어야하며 두 번째 경우에는 NSNumber 개체에 대한 명시 적 참조가없고 공개되거나 자동 풀 풀에 저장됩니다. 사용자를 대신하여이 두 가지 요구 사항을 처리합니다.

+1

해당 가이드의 오타가 있습니다 (함수의 4 행,'aPerson :'은'aPerson'이어야합니다). 내가 추측하는 버그를 제기해야한다. – dreamlax

+0

지적 해 주셔서 감사합니다! –

0

예 ARC는 괜찮습니다. 사실, 당신이 구현 한 첫 번째 방법을 권하고 싶습니다.

0

두 가지 예가 좋습니다. 메모리 관리/ARC가가는 한이 두 가지 사이에는 차이가 없습니다.

관련 문제