iOS开发中两个不错的宏定义

/**

 Synthsize a weak or strong reference.

 

 Example:

    @weakify(self)

    [self doSomething^{

        @strongify(self)

        if (!self) return;

        ...

    }];

 

 */

 

 

#ifndef weakify

    #if DEBUG

        #if __has_feature(objc_arc)

        #define weakify(object) autoreleasepool{} __weak __typeof__(object) weak##_##object = object;

        #else

        #define weakify(object) autoreleasepool{} __block __typeof__(object) block##_##object = object;

        #endif

    #else

        #if __has_feature(objc_arc)

        #define weakify(object) try{} @finally{} {} __weak __typeof__(object) weak##_##object = object;

        #else

        #define weakify(object) try{} @finally{} {} __block __typeof__(object) block##_##object = object;

        #endif

    #endif

#endif

 

#ifndef strongify

    #if DEBUG

        #if __has_feature(objc_arc)

        #define strongify(object) autoreleasepool{} __typeof__(object) object = weak##_##object;

        #else

        #define strongify(object) autoreleasepool{} __typeof__(object) object = block##_##object;

        #endif

    #else

        #if __has_feature(objc_arc)

        #define strongify(object) try{} @finally{} __typeof__(object) object = weak##_##object;

        #else

        #define strongify(object) try{} @finally{} __typeof__(object) object = block##_##object;

        #endif

    #endif

#endif

ARC和MRC环境下关于防止block内部self循环引用的问题

posted @ 2016-03-09 22:34  我不是冰红茶  阅读(460)  评论(0编辑  收藏  举报