2012-01-10 1 views
8

현재 코드를 ARC로 마이그레이션하려고하면 NSString을 NSInvocation 인수로 전달할 때마다 오류가 발생합니다.NSInvocation 및 ARC (Automatic Reference Counting)

예 :

NSInvocation inv = ...; 
NSString *one = @"Hello World!"; 
[inv setArgument:&one atIndex:2]; 

오류가 나는 팩터를 사용할 때 발생 -> 편집 메뉴에서 오브젝티브 C ARC 옵션으로 변환합니다. 텍스트는 "NSInvocation의 setArgument는 __unsafe_retained 이외의 소유권을 가진 객체와 함께 사용하는 것이 안전하지 않습니다."

어떻게이 문제를 해결할 수 있습니까?

답변

10

이것은 작동 할 수 있습니다.

+3

이 작업은 가능하지만이 작업에서 메모리 처리에는 매우주의해야합니다. NSInvocation을 피할 수 있다면 더 이상 NSInvocation을 사용하지 않는 것이 좋습니다 ... –

+1

OCMock을 사용하고 있으며 콜백 블록에 NSInvocation 개체를 전달합니다. 모든 매개 변수에서 __unsafe_unretained를 사용하지 않으면 ARC는 매우 불만을 갖습니다. 팁 (팁)에 감사드립니다, 신비한 충돌은 갔다! – phatmann

5

Joshua Weinberg가 언급했듯이 NSInvocation을 사용하는 것이 더 이상 권장되지 않습니다. 두 개의 매개 변수가있는 경우 performSelector를 사용할 수 있습니다. 세 개 이상의 매개 변수에 대해서는 here과 같이 NSObject의 -methodForSelector:을 사용할 수 있습니다.

관련 문제