Objective-C 메모리 관리에서 retain/release 메소드를 테스트하는 간단한 프로그램을 만들었습니다. ObjC 메모리 관리에 대해 알고 있듯이, retain count = 1 인 객체를 으로 호출하면이라는 리 테인 수가 0으로 감소한 다음 릴리스됩니다.retainCount = 1 인 obj에서 [obj release]를 수행해도 retainCount가 0으로 감소하지 않습니다.
// TestClass.h
#import <Cocoa/Cocoa.h>
@interface TestClass : NSObject {
}
@end
// TestClass.m
#import "TestClass.h"
@implementation TestClass
@end
// RetainRelease.m
#import <Foundation/Foundation.h>
#include "TestClass.h"
void dumpRetain(id o);
int main (int argc, const char * argv[]) {
TestClass *s = [[TestClass alloc] init];
dumpRetain(s);
[s release];
dumpRetain(s);
}
출력 :
2010-08-13 17:42:45.489 RetainRelease[20933:a0f] NSString - retain count=1
2010-08-13 17:42:45.491 RetainRelease[20933:a0f] NSString - retain count=1
누군가가 그것을 설명 할 수 있지만,이 테스트 프로그램은 첫 번째 릴리스 후 나는 아직도 계수 = 1을 유지할 수 있음을 보여? 감사합니다.
답변 해 주셔서 감사합니다. 이 일러스트레이션으로 인해 0으로 감소 할 것으로 예상했습니다. http://cocoadevcentral.com/images/articles/000094/learnobjectivec-referencecounting.png 이 코드를 사용하면 참조 카운팅이 추상 지점에서 어떻게 작동하는지 보여 주려고합니다 보기; 나는 "당신이이 객체를 소유하고 있는가"에 대해 생각하는 것이 앱 프로그래밍 관점에서 훨씬 낫다는 것에 동의합니다. – Max
@Max "retainCount가 0에 도달 할 때 객체의 할당이 해제 될 때"에 대해 생각하면 사실을 쉽게 이해할 수 있습니다. 그러나, "retainCount가 1 인 객체가 릴리즈 될 때, 할당이 해제됩니다"라고 구현됩니다. 0으로 감소시킬 필요가 없기 때문에 구현됩니다. 구현 최적화입니다. –
해명 해 주셔서 감사합니다. – Max