2013-03-18 2 views
2

프로젝트를 ARC로 변환 중입니다.
프로젝트에서 구조를 사용하고 있습니다.
은 ARC
내가 SO에서 검색구조체에서 __unsafe_unretained를 사용하는 방법

ARC forbids Objective-C objects in structs or unionsrk - type definition for struct 

로 변환하는 동안 그것은 나에게 오류를주고 내가 __unsafe_unretained .IT를 사용하여 문제를 해결할 수 있음을 발견했다. 그래서 저는 그것을 제 구조에서 사용했습니다.

typedef struct Grade{ 
    __unsafe_unretained NSString *Table, 
           *RowId, 
           *ScheduleID, 
           *Level, 
           *Label, 
           *Thershold; 

    char *CreateStmt; 
} grade; 

이 노력하고 있지만 지금은 *RowId에 다음 행에서 같은 오류를 보이고있다.
내 질문에 모든 변수 앞에 __unsafe_unretained를 넣어야합니까? 그렇게하는 것이 안전할까요? 또는이를 수정하는 또 다른 방법이 있습니다.

+0

참조 this stackoverflow.com/questions/8093099/arc-forbids-objective-c-objects-in-structs-or-unions-despite-marking-the-file-f – Tirth

+0

http://stackoverflow.com/questions/8093099/arc-forbids-objective-c-objects-in-structs-or-unions-marking-the-file-f –

+0

나는 그렇게하고있다. 하지만 내 질문은. 이런 식으로 사용하는 것이 안전할까요? 모든 변수 앞에 __unsafe_unretained를 넣는 것과 같은가? – KDeogharkar

답변

2

ARC는 기술적 인 이유가 있지만 기술적 인 이유가 있지만 항상 잊어 버리며 __unsafe_unretained 한정자를 사용하여 구조체의 해당 요소에 대해 ARC를 사용하지 않도록 설정할 수 있습니다. 그렇다면 메모리 관리가 없습니다. 모두, 심지어 자신의. 개체를 유지하고 해제하는 일부 개인 기능이 있지만 사적인 기능을 제공하므로 사생활이 보장 될 수 없으므로 사과 앱 스토어에서 문제가 발생할 수 있습니다. 이 문제를 해결하는 가장 좋은 방법은 객체 요소가있는 구조체가있는 .m 파일에 대해 ARC를 설정 한 다음 (해당 파일에 -fno-objc-arc 사용) 모든 파일에 대해 수동으로 모든 메모리 관리를 수행하는 것입니다. 범주를 사용하여 수동으로 참조 계산을 수행하는 데 필요한 코드의 양을 줄이면 클래스 파일에 대해 ARC를 해제하고 예를 들어 범주 중 하나에 대해 ARC를 사용할 수 있습니다.

+1

기술적 인 이유는 [프로젝트 변환 중 공통적 인 문제] (http://developer.apple.com/library/mac/#releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html#//apple_ref/doc)에 설명되어 있습니다./uid/TP40011226-CH1-SW16) : "이것은 ARC 릴리스 노트로 전환"에서 * : "x가 강력하게 유지되고 컴파일러가 제대로 작동하도록하는 데 필요한 모든 코드를 안전하게 합성 할 수 없기 때문입니다. "* Objective-C 객체로 구조체를 대체하는 것이 좋습니다. –

관련 문제