NSAutoReleasePool의 작동 방식을 이해하는 데 어려움이 있습니다.NSAutoreleasePool EXC_BAD_ACCESS 및 Objective-C의 메모리 관리에 대한 질문
1) NSAutoReleasePool 별도로 각 할당을 추적 않거나 변수에 의존 작동합니까? 즉,이 누출 메모리를 수행하거나 해제 모두?
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSArray* myObj = [NSObject alloc];
myObj = [NSObject alloc];
[pool release];
2) 이유는 무엇입니까 다음 코드가 작동 :
NSAutoreleasePool *pool1 = [[NSAutoreleasePool alloc] init];
NSArray* myObj = [NSObject alloc];
for(int i = 0; i < 100; i++) {
[myObj release];
myObj = [NSObject alloc];
}
[pool1 release];
하지만 다음은 [pool1 release]
에서 EXC_BAD_ACCESS을 제공합니다
NSAutoreleasePool *pool1 = [[NSAutoreleasePool alloc] init];
NSArray* myObj = [NSObject alloc];
NSAutoreleasePool *pool2 = [[NSAutoreleasePool alloc] init];
for(int i = 0; i < 100; i++) {
[myObj release];
myObj = [NSObject alloc];
}
[pool2 release];
[pool1 release];
3) 작업 위의 코드 (2 개의 풀이있는 코드)?
다음 번에 사용하지 말고
을 사용하지 마시고 "'을 사용하거나 패널에서 {} 기호를 클릭하십시오. 이것은 우리가 여기에서하는 방식입니다 : D – vodkhang
알지 못했습니다. 덕분에 – Caner
autorelease 풀이 _autoreleased_ 오브젝트를 릴리스하고 임의의 오브젝트를 릴리즈하지 않아야한다는 것을 깨닫지 못하고 있습니다. 테스트 객체를 초기화하지 않은 상태에서 autoreleased하지 않았으므로 자동 풀이 풀을 만지지 않습니다. http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmObjectOwnership.html%23//apple_ref/doc/uid/20000043-BEHDEDDB 및 http://developer.apple을 참조하십시오. .com/library/mac/# documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmAutoreleasePools.html % 23 // apple_ref/doc/uid/20000047-CJBFBEDI –