음, 먼저, 당신은 ARC 여부를 사용하는 경우 알아야합니다. 다음으로, 캐스팅을 통해 실제로 무엇을하고 싶은지를 알아야합니다. 가치를 사용하거나 소유권을 이전하기를 원하십니까?
IMO는 모든 새 코드가 실제로 ARC를 사용해야하므로 (ARC는 캐스팅 문제가 더 많이 발생하기 때문) ARC로 가정합니다.
CFArrayRef someArrayRef = ...;
NSArray *array = (__bridge NSArray*)someArrayRef;
상기 코드는 현재 컨텍스트에 사용될 수있는 NSArray*
에 CF 참조 캐스트. 소유권 이전은 발생하지 않았습니다. someArrayRef
은 여전히 해당 참조를 보유하고 있으며 수동으로 someArrayRef
을 수동으로 릴리스해야합니다. 그렇지 않으면 누출됩니다.
CFArrayRef someArrayRef = ...;
NSArray *array = CFBridgingRelease(someArrayRef);
이 코드에서는 캐스트를 얻지 않고 소유권을 이전합니다. someArrayRef
은 더 이상 참조를 보유하지 않으므로 수동으로 해제 할 필요가 없습니다. 대신 array
이 해제되면 객체는 dealloc됩니다 (다른 위치에서는 다른 참조가 없다고 가정 함).
대단히 감사합니다! 나는 지금 당장 노력할 것이다! – user1574429
복사 할 필요가 없습니다. 무료 문자 브릿지는 문자 그대로 NSArray * myNsArray = (NSArray *) myCfArray; – jjv360
입니다. 이는 ARC가 아닌 코드에서만 작동합니다. –