#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.
求解答
Bukankah __Lemah sepatutnya berada di hadapan nama kelas?
Lemah memerlukan sokongan daripada persekitaran masa jalan.
Apabila anda memilih versi minimum yang sesuai, anda boleh menyusun kod sumber dengan pembolehubah diubah suai yang lemah.
Parameter tulis semula-objc "mengeksport" kod objc ke dalam kod c++ dan __weak diubah suai apabila objc ARC dikompilasi Adakah anda mahu menyusun atau menukar?
Untuk menukar, tukar __lemah kepada __unsafe_unretained.
Alih keluar parameter tulis semula-objc semasa menyusun.