2009-02-25 5 views
5

용 닐 I는 I 개체, foo = nil를 nil을 경우, 즉 낮은 메모리를 해제 따라서 효과적으로 1 카운트를 유지 않는 NSMutableString인 NSMutableString 및 메모리 관리

NSMutableString *foo = [[NSMutableString alloc] init]; 

로 있다면? 이 시점에서 힙의 foo를 재사용해야 사용할 수 있습니까?

답변

8

the basic documentation을 읽으십시오. 변수 foo을 nil로 설정하면 이전 내용에는 아무런 영향을 미치지 않습니다. 기억하십시오. foo은 객체에 대한 포인터 일뿐입니다. 그것을 사용하려면 유효한 객체를 가리 키도록해야합니다. 그 객체를 가리 키지 않도록 더 이상 객체를 해제하지 않습니다.

+1

OP가 변수와 혼동을 일으킬 수 있습니다. foo가 변수가 아닌 속성 인 경우 obj.foo = nil로 설정하면 참조 횟수가 해제됩니다. –

2
보유 수를 1 줄여 효과적으로 메모리를 해제합니까?

없음

당신은

[foo release] 
0

foo = nil;이 개체의 유지 수를 낮출 수 없습니다 사용해야합니다. 그것은 단지 foo을 객체 대신에 아무 곳에도 가리 키지 않습니다. 보유 수를 감소 시키려면 [foo release];라고해야합니다.

5

변수에 nil을 할당해도 이전에 있었던 값에는 영향을주지 않습니다. 보유 수는 release 만 감소합니다.

Apple의 Cocoa memory management guidelines을 읽어야합니다. Cocoa의 참조 계산 시스템은 그다지 어렵지는 않지만 배워야 할 것이므로 올바르게 배웠다면 프로그램에 미친 버그가 많이 생겨 미친 듯이 몰리게됩니다.

4

위의 모두는 절대적으로 사실입니다. 해당 코드 스 니펫에 릴리스가 필요합니다.

그러나, 그 옳은 일 경우 특성에 할당하면 유지 수를 낮출 것을 명심하는 것이 중요합니다. 즉 :

foo = nil;   // doesn't lower 
bar.foo = nil;  // probably does 

속성은 일반적인 변수와 비슷하지만 실제로는 그렇지 않습니다. 지능적으로 자신의 메모리 관리를 처리합니다. 그것은 당신이 그들과 함께 일할 때 명심해야 할 것입니다.

+0

"속성 ... 자신의 메모리 관리를 지능적으로 처리합니다."물론 올바르게 선언했다고 가정합니다. @property (assign)로 선언하면 해제되지 않습니다. –

+0

사실입니다. 그러나 (할당)을 사용하여 속성을 선언하면 실제로는 보유하지 않아야합니다 (예 : 대리인이기 때문에). 일반적으로 다른 클래스의 속성이 값의 메모리를 올바르게 관리한다고 가정해야합니다. –