#import <Foundation/Foundation.h>
extern void _objc_autoreleasePoolPrint();
int main(int argc, char * argv[]) {
@autoreleasepool {
Person *p = [Person new];
Person __weak *p2 = p;
_objc_autoreleasePoolPrint();
}
}
結果是這樣的:
$ clang -rewrite-objc -fobjc-arc main.m
/var/folders/t0/nty3j9vx1rn8786q_tpclydc0000gn/T/main-2fe2fd.mi:46509:31: error: cannot create __weak reference
because the current deployment target does not support weak references
Person __attribute__((objc_ownership(weak))) *p2 = p;
^
1 error generated.
求解答
__Weak不是應該在類別名稱前面嗎?
weak 需要運行時環境的支援。
當你選擇了一個合適的最低版本後,才能編譯有 weak 修飾變數的原始碼。
參數rewrite-objc是把objc程式碼「導出」為c++程式碼,而__weak是在objc ARC編譯時修改的,你是要編譯還是轉換?
轉換的話把 __weak 改為 __unsafe_unretained 。
編譯的話去掉 rewrite-objc 參數。