대부분의 경우, 어느 쪽이든 상관 없습니다. -autorelease
은 단순히 실행 루프의 현재 반복 끝에 객체가 해제된다는 것을 의미하므로 객체는 어느쪽으로 든 해제됩니다.
-autorelease
을 사용할 때 가장 큰 이점은 메서드의 컨텍스트에서 개체의 수명에 대해 걱정할 필요가 없다는 것입니다. 마지막으로 사용한 후 여러 줄로 개체를 사용하여 나중에 작업하기를 원하는 경우에는 -release
으로 전화를 옮길 염려가 없습니다. 당신이 당신의 방법에 임시 개체의 많은을 만드는 경우
-autorelease
를 사용하여 대 눈에 띄는 차이를 만들 것입니다 -release
를 사용하여 주요 인스턴스입니다.
이 방법이 끝나는 시간으로
- (void)someMethod {
NSUInteger i = 0;
while (i < 100000) {
id tempObject = [[[SomeClass alloc] init] autorelease];
// Do something with tempObject
i++;
}
}
는, 당신은 100,000 개체가 해제되기를 기다리는 오토 릴리즈 풀에 앉아있어 예를 들어, 다음과 같은 방법을 고려한다. tempObject
의 클래스에 따라, 이것은 데스크탑에서 주요한 문제 일 수도 있고 아닐 수도 있지만, 메모리가 제한된 iPhone의 경우 가장 확실합니다. 따라서 많은 임시 개체를 할당하는 경우 -autorelease
에 실제로 -release
을 사용해야합니다. 그러나, 많은/대부분의 사용을 위해, 당신은이 두 가지 사이의 큰 차이점을 보지 않을 것입니다.
+1. autorelease는 성능 (일반적으로 비 - 대형 루프 코드의 숫자로 백업 된 경우는 드물다)보다 많은 flak를 얻습니다. 그러나 autorelease는 코드가 리팩터링 될 때 많은 누수를 줄여줍니다. 낮은 수준의 루틴에서는 더 큰 레벨의 큰 루프에서 호출 될지 여부를 알지 못하기 때문에 더 자주 릴리스를 사용합니다. 그래도 release를 사용하려고한다면, 변수가 여전히 범위 내에 있다면 즉시 변수를 nil로 설정해야합니다. 개체를 놓지는 않지만 포인터는 여전히 있습니다. –