2012-06-18 5 views
0

ARC에 관한 문서를 읽고 혼란 스러웠던 부분을 발견했습니다. 누구든지 나를 도울 수 있습니까? 두 가지 질문이 있습니다. 1. 변수가 가리키고 있지 않을 때 ARC 릴리스 객체를 알 수 있습니다. 이제는 어떤 메소드가 있다고 가정합니다. (NSString *) returnString, return type이 NSSTring이므로 어떤 변수가 발생합니까? returnString 메서드에 선언되어 있습니다? returnString이 호출되는 메서드의 범위를 벗어날 때받는 변수가 릴리스 될 것이라는 것을 알고 있지만 returnString 내부의 변수는 어떻게 될지 알 수 있습니다.ARC를 사용할 때 메모리가 해제되는 방식은 무엇입니까?

-(NSSTring *)returnString 
{ 
    NSString *str = //Some value; 

    return str;//What will happen to this. 
} 

및 다른 방법 returnString는 ARC 컴파일되지 않은 일부 타사 라이브러리에있는 경우

-(void)useString 
{ 
    NSString *str1 = [self returnString]; //It will get release when this method gets over. 
} 

2.What이 일어날 것인가?

답변

0

첫 번째 질문에 대해서는 ARC가 귀하를 위해 보관 및 해지 할 것입니다. 여전히 변수에 대한 참조를 유지하고있을 때마다 ARC가 변수를 유지해야합니다. 특정 예제에서 문자열은 자동 렌더링 된 객체로 반환되지만 실제 구현은 사용자로부터 숨겨집니다.

두 번째 질문으로 수동 유지/해제를 유지하기 위해 라이브러리를 ARC를 사용하지 않는 것으로 표시 할 수 있습니다. 이렇게하려면이 질문을보십시오 : ios5 ARC what is the compiler flag to exclude a file from ARC?

+0

답장을 보내 주셔서 감사합니다. 첫 번째 대답이 있습니다.하지만 두 번째 질문에 대해서는 두 번째 경우에 수동으로 str을 자동 갱신해야합니까? –

+0

파일에 "-fno-objc-arc"라고 표시되어 있으면 수동 retain/release/autorelease가 필요합니다. – kevboh

2

ARC는 컴파일시에 [... retain][... release] 메서드 호출을 삽입하기 만합니다. 귀하의 경우에는 'str'이 지역 변수이고 선언 다음에 autorelease 메소드 호출이 추가 된 것을 볼 수 있습니다. 그래서 정말로, 메모리는 같은 방식으로 할당이 해제됩니다.하지만 ARC가 걱정하지 않아도됩니다.

+0

컴파일러는'-retain','-release' 및'-autorelease'가 추가되면 코드를 최적화하고 코드를 최적화합니다. 따라서 많은 코드가 추가 될 수 있습니다 전화를 걸 때도 다시 삭제되었습니다. 훨씬 적은 수의 객체 만 자동 풀 풀에 저장됩니다. – hypercrypt

관련 문제