2011-01-25 1 views
-1

안녕하세요 저는 일반적으로 다른 클래스의 객체를 만듭니다. 이게 자동 해제 풀에 있다면 나 한테 전화 좀 해줄 래? 또는 수동으로 릴리스해야합니다.다른 클래스의 Dealloc 객체

+2

일부 코드를 보여 주거나 질문을 더 잘 설명하거나 둘 다 설명해야합니다. 당신이 만든 객체 중 일부는 자동으로 리사이징 될 수도 있고 그렇지 않을 수도 있습니다 ... –

답변

1

하면 초기화 복사하거나 새로운 경우에 당신은 당신이 그때 그들은 예를 들어

를 오토 릴리즈 될 할당을 가진 autorlease을 세우면 그 할당을 해제해야합니다

Foo *foo = [[Foo alloc] init]; //you'll have release it somewhere yourself 

그리고

Foo *foo = [[[Foo alloc] init] autorelease];// this will be autreleased 
1

간단한 경우 : init을 사용하는 경우 release를 호출하거나 autorelease를 호출하여 릴리스해야합니다.

NSString *myString = [NSString alloc] init]; // You need to release this 
... 
[myString release]; // Now it's released - don't use it again! 

또는

NSString *myString = [NSString alloc] init]; // This needs releasing 
... 
return [myString autorelease]; // You are finished with it but someone else might want it 

다른 사람에게 줄려고하는 경우 그러나, 몇 가지 다른 경우가있다.

NSString *myString = [NSString stringWithFormat:@"hi"]; 

이 객체는 이미 자동 풀에 있습니다. 풀어 놓지 마십시오!

NSString *secondString = [myString copy]; 

이 객체는 해제 필요가 - 그것은 오토 릴리즈 하지입니다.

엄지 손가락의 의미 : 이름에 init, copy 또는 new가있는 것은 사용자가 만든 것입니다. 다른 것은 자동 출시됩니다.

+1

엄지 손가락 규칙은 정확하지 않습니다 : 그것은'init'이 아니라 release를 요구하는'alloc'이고'new' 또한 누락되었습니다. – danyowdee

+0

폭발, 나는 항상'새'잊지 :(나는 내 대답을 편집했습니다 감사합니다! – deanWombourne