, 난 등 오브젝트의 배열을 관리 할 수있는 개체 오브젝트 유형 "을 참조하십시오.엑스 코드 4 (C)의 배열은 엑스 코드 3 컴파일러와
가장 좋은 방법은 NSArray로 변환하는 것이지만 C 스타일 배열 첨자 (예 : self.layer [i])를 사용하는 100 줄의 코드가 있다고 생각합니다. 고칠 수있는 다른 방법이 있습니까?
, 난 등 오브젝트의 배열을 관리 할 수있는 개체 오브젝트 유형 "을 참조하십시오.엑스 코드 4 (C)의 배열은 엑스 코드 3 컴파일러와
가장 좋은 방법은 NSArray로 변환하는 것이지만 C 스타일 배열 첨자 (예 : self.layer [i])를 사용하는 100 줄의 코드가 있다고 생각합니다. 고칠 수있는 다른 방법이 있습니까?
assign
속성으로 변경하여 개체가 아닌 것을 유지하려고하지 않습니까?
예, 그게 내가하고있는 일입니다. 나는 컴파일러가 불평하지 않았지만 gcc에서 retain 속성이 작동하지 않았기 때문에 수동 유지/릴리스를 이미 수행하고 있습니다. – user1055568
C 배열에서 Objective-C 메모리 관리 호출 (예 : retain)을 사용할 수 없습니다. 표준 C 또는 C++ 로직을 사용하여 어레이를 관리해야합니다. 스스로 malloc하고 메모리를 비울 필요가 있습니다. 배열을 유지할 필요가 없다면 retain
속성을 제거 할 수 있습니다. 이 코드
선언 된 것처럼, ivar 자체에는 메모리 관리가 필요하지 않지만. ivar에 대한 메모리는 오브젝트 내에 인라인으로 저장됩니다. 'malloc'이나'free'는 필요 없습니다. – bbum
몇 가지 문제 :
그것은 MyView
하지 myView
해야한다; 클래스는 대문자로 시작합니다.
CALayer **
은 아니요 개체 유형입니다. 이것은 객체 유형에 대한 포인터이므로 컴파일러가 불만을 제기합니다. 단순히 할당하면 컴파일이되지만 여전히 잘못 될 것입니다.
이 데이터를 저장하기 위해 언어 배열 (MyClass foo[4]
)을 사용할 이유가 없습니다. 독립 실행에서 "이 슬롯이 채워지지"에 대한로 [NSNull null]
을 사용할 수 있습니다 (AN있는 NSMutableArray를 사용합니다.
당신이 정말 언어 배열을 고수 할 경우, retain
놓습니다. 그냥 기억 어레이 내에서 객체의 유지/해제를 명시 적으로 관리해야합니다.
또한 일반적인 표준 패턴으로 인라인되도록 코드를 수정하는 것이 어려울 수도 있지만 코드가 발전하면서 더 많은 비용이 드는 것입니다. 언젠가는 정말로 그렇게해야 할 상황에 처할 것입니다.
나는 왜/원래 코드가 gcc에서 작동하는지 알고 싶다. 어떤 생각이든? – hooleyhoop
코드가 GCC에서 작동하지 않았습니다. GCC는 오류를 잡으려고 너무 바보 같았습니다. GCC 4.2에서'@ property'를 사용하는 것은 악몽이었고 엄청난 양의 엔지니어링 노력 없이는 잡을 수없는 몇 가지 오류가있었습니다. – bbum
아, 그 이유는 내가 보유/출시의 행동을 그렇게 당황스럽게 생각한 이유입니다. 그것은 심지어 효과가 없었기 때문입니다! 나는 부적절하게 같은 것을하고있는 코드에서 외삽 법으로 외삽 법을 외삽했다는 것을 추측한다. 하지만 원칙적으로 제가 원하는 것을 할 수있는 방법이없는 이유는 아닙니다. 분명히, 나는 별개의 객체 인 * layer0, * layer1, * layer2, * layer3을 선언 할 수 있었고, 내가 원하는대로 작동하도록 만들 수 있었다. 그래서, 왜 레이어 * [0], * 레이어 [1], * 레이어 [2], * 레이어 [3]? 사실, 그게 잘 작동, 그냥 보존/릴리스를 합성하지 않습니다, 괜찮아요, 지금은 이해가 같아요. – user1055568
좋아요, 기본 컴파일러를 LLVM에서 LLVM gcc로 변경하는 빠른 답변을 찾았습니다. 4.2. 하지만 LLVM을 사용하여이 작업을 수행 할 수있는 방법이 있는지 알고 싶습니다. – user1055568
배열을 수정할 때 (자동 참조 계산을 사용할 수 없기 때문에 생기는 여분의 모든 것들을) 유지/해제하는 것을 잊어 버림으로 인한 메모리 누수 및 임의의 충돌을 추적하는 것은 아마도 이걸 고쳐라. –