2012-10-30 4 views
0

iOS 앱 개발을 위해 ARC 사용 속도가 빨라지고 있습니다. 간혹 일반 old C-Structs의 일반 C 배열이 작업을 완료하는 데 필요한 전부입니다. ARC 이전에는 dealloc 메소드에 free()을 추가하기 만했습니다. ARC가 있으면 dealloc에 대한 필요성이 더 이상 없습니다. 내 c-array (s)를 자유롭게 처리하도록 컴파일러에 알리기 위해 추가 할 수있는 ARC 지시문이 있습니까?자동 참조 횟수 (ARC). ARC가 일반 C 배열을 자유롭게 처리 할 수 ​​있습니까?

당 톰의 대답은 여기의 dealloc 방법

// EIVertex 
struct EIVertex { 
    GLKVector3 p; 
    GLKVector3 n; 
    GLKVector3 barycentric; 
    GLKVector2 st; 
}; 

typedef struct EIVertex EIVertex; 

// ivar declaration 
EIVertex *_vertices; 

// malloc an array of EIVertex 
_vertices = (EIVertex *)malloc([_triangles count] * sizeof(EIVertex)); 

// Note lack of [super dealloc] 
- (void)dealloc{ 

    // ARC will not handle mem. management for plain ole c arrays. 
    free(_vertices); 
} 
+0

'EIVertex'는 Objective-C 클래스입니까? Objective-C 클래스에서는'sizeof'를 사용하지 말아야합니다. 왜냐하면 클래스의 크기가 런타임에 바뀔 수 있기 때문입니다. 어쩌면 포인터 배열을 대신 사용할 수 있습니다. – newacct

+0

@newacct, EIVertex는 일반 OLE 구조체입니다. 코드 스 니펫을 업데이트하여보다 명확하게 만들었습니다. 혼란을 드려 죄송합니다. – dugla

답변

3

당신은 여전히 ​​할당 해제를 오버로드 할 수 있습니다. 유일한 것은 명시 적으로 호출 할 수 없다는 것입니다. 따라서 이전처럼 dealloc을 작성하되 [super dealloc]을 호출하지 마십시오.

+0

ARC 친화적 인 '-dealloc'의 예를 보여 주어야합니다. :) –

+0

@ 톰, ARC 지침이 없다는 것을 분명히하기 위해? – dugla

+0

@Tom 예를 들어 간단히 말해서 내 ivar을 __strong으로 선언하면 ARC가 나를 위해'free() '를 호출 할 것입니까? – dugla