Maison > Questions et réponses > le corps du texte
#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.
求解答
阿神2017-05-02 09:34:47
Faible nécessite la prise en charge de l'environnement d'exécution.
xcrun --show-sdk-path > SDK_PATH;clang -x objective-c -isysroot $SDK_PATH -rewrite-objc -fobjc-arc -fblocks -mios-version-min=8.0.0 -fobjc-runtime=ios-8.0.0 -O0 main.m
Lorsque vous sélectionnez une version minimale appropriée, vous pouvez compiler le code source avec des variables faiblement modifiées.
習慣沉默2017-05-02 09:34:47
Le paramètre rewrite-objc "exporte" le code objc en code c++, et __weak est modifié lorsque objc ARC est compilé. Voulez-vous compiler ou convertir ?
Pour convertir, remplacez __weak par __unsafe_unretained.
Supprimez le paramètre rewrite-objc lors de la compilation.
$ clang -fobjc-arc main.m -o main.o
$ ./main.o
objc[91465]: ##############
objc[91465]: AUTORELEASE POOLS for thread 0x7fff7c93f000
objc[91465]: 1 releases pending.
objc[91465]: [0x7f8471000000] ................ PAGE (hot) (cold)
objc[91465]: [0x7f8471000038] ################ POOL 0x7f8471000038
objc[91465]: ##############