NSMutableArray에 CGGradientRef를 저장하는 작업에 문제가 있습니다. 배열에 저장하고 래핑을 해제하려면 무엇을해야합니까?NSMutableArray에 CGGradientRef를 저장하는 방법
감사합니다.
NSMutableArray에 CGGradientRef를 저장하는 작업에 문제가 있습니다. 배열에 저장하고 래핑을 해제하려면 무엇을해야합니까?NSMutableArray에 CGGradientRef를 저장하는 방법
감사합니다.
아무 것도 포장하지 않아도됩니다. 그냥 id
으로 캐스팅하고 배열에 추가하십시오. CFType에서 파생 된 CoreFoundation 유형 ("Ref"로 끝나는 모든 것)에 대해이 작업을 수행 할 수 있습니다.
또는 NSMutableArray *를 CFMutableArrayRef로 캐스팅하고 CFArrayAppendValue()를 호출 할 수 있습니다. 이것은 더 형식 안전하지 않습니다. 배열이 생성 될 때 지정된 retain/release 콜백을 호출합니다. (주목할만한 예외 예외는 - [NSDictionary setValue : forKey :] 키를 복사하는 반면, 해당 CFDictionary 함수는 그렇지 않습니다. 때때로 "변경 가능한"객체 (예 : NSURLConnection, 데이터 소 -far 값으로 사용), 해시가 변경되지 않는다는 조건을 위반하지 않는 한 안전합니다.)
CoreFoundation 유형은 '일반'C에서 사용할 수있는 OO 유형입니다. 영리한 마법을 사용하면 (Apple이 CF와 ObjC 런타임을 모두 작성하므로이 작업을 수행 할 수 있습니다.) NSString, NSArray 및 NSDictionary와 같은 유형의 인스턴스는 기본적으로 CFString, CFArray 및 CFDictionary의 "실제"인스턴스입니다. CF 유형은 유형 계층에 있으며, 그 루트는 CFType입니다. 주목할만한 방법은 CFRetain, CFRelease, CFEqual, CFHash 및 CFCopyDescription입니다. 이것들은 -retain, -release, -isEqual :, -hash, -description에 거의 해당하지 않습니다 (-description은 자동으로 릴리즈되고, NULL/nil의 처리가 다릅니다). Apple은이 "유료 브리징"또는 "상호 교환 가능한 데이터 유형"이라고 부릅니다 (IDT 기사는 더 이상 Mac 개발자 센터에 없습니다). Ridiculousfish에는 "Bridge"이라고하는 좋은 기사가 있습니다.
이것이 의미하는 바는 대부분 CF 유형을 Objective-C 객체처럼 처리 할 수 있다는 것입니다. 애플은 이것을 특별히 명확하게하지 않았지만, "수신자 부담 브리징"에 대한 모든 언급에 덧붙여, 그들은 상호 교환 가능하다고 가정하는 것들이있다.
@property (nonatomic, retain) __attribute__((NSObject)) ABAddressBookRef foo;
과 같은 내용은 실제로 "그것이 Objective-C 인스턴스 인 것처럼 보냅니다."라고 의미합니다.id
유형이지만 CGImageRef 만 지원됩니다 (-drawRect : draw하는 CABackingStore도 지원함).추가 재미있는 일은 CFAutorelease을 정의하는 것입니다.
감사합니다. – Cyprian