2013-02-06 2 views
-1

새로운 객체를 생성하고 "객체를 소유"하고 목표 - C에서 객체를 할당하는 경우 즉, 그것에게내가 참조 카운팅 주위에 전체 사업을 이해

을 해제하는 것은 귀하의 책임 때 당신은 ALLOC를 호출해야 할 때

그러나 정확하게 새로 생성 된 객체에 alloc을 호출해야하는 경우는 언제입니까? 스코프가 끝난 후에 참조를 유지하거나 다른 이유가있을 수 있습니까?

답변

2

개체를위한 메모리를 할당하려면 alloc을 호출해야합니다.

Object *obj = [[Object alloc] init]; 

ALLOC를 호출 개체에 대한 메모리를 할당하고 초기화 호출을 초기화합니다 (모든 속성/속성 그것을 재치있는 기본값을 제공합니다) :

객체의 전형적인 설정은 같은입니다.

유형 팩토리 메소드와 함께 일부 객체,이 경우 예를 들어

NSArray *arr = [NSArray array]; 

는, 객체는 초기화하고 단일 배열 호출에 의해 할당된다.

이 두 가지 방법에 서로 다른 소유권 규칙이 적용된다는 점을 제외하고는 참조 계산과 관련이 없습니다.

+0

유일한 시간이 ** 필요 ** 공장 출하 방법이없는 경우 자신이 ALLOC 호출하는 것입니다. 당신은 카운트를 유지하고 어떤 방법 으로든 물건을 다룰 수 있습니다. – Fogmeister

0

나는 정확히 객관적이지는 않지만 모든 객체에 alloc을 호출한다고 생각하지 않는다. 객체를 할당하기 위해 클래스에서 호출하고 새로 할당 된 객체에 init을 호출한다.

release을 자동 풀 풀로 수행 한 후에 참조를 유지하려면이 설정을 사용하는 것이 좋습니다. 이는 흔히 [NSThing thingWithStuff:stuff] 또는 일부를 사용하여 생성 된 객체에서 발생합니다.

1

나는 당신이 기본 개념을 오해하고 있다고 생각합니다. alloc을 클래스에 보내면 (아직 초기화되지 않은) 해당 클래스의 새 객체가 생성됩니다 (보유 개수는 1이됩니다).

"정확히 새로 생성 된 객체에 alloc을 호출해야합니까?" - 객체가 새로 생성 된 경우 다른 사람이 이미 할당 한 것을 의미합니다.

의미 : 새로 생성 된 객체에 대해 언제 retain해야합니까? 그 대답은 당신이 그것을 소유하고 그것을 할당하고자하는 사람에게 의존하지 않고 언젠가 그것을 풀어주기를 원할 때이다. alloc/new 구문은 retain count를 하나 올린다. (NSArray 배열과 같이) 오토 릴리즈 개체를 반환 ..

을 일반적으로 내가 ARC를 사용하는 것이 좋습니다 이러한 문제로 방해하지 ...