ARC Support Without Branching

 

//

//  ARCMacros.h

//

//  Created by John Blanco on 1/28/2011.

//  Rapture In Venice releases all rights to this code.  Feel free use and/or copy it openly and freely!

//

 

#if !defined(__clang__) || __clang_major__ < 3

#ifndef __bridge

#define __bridge

#endif

 

#ifndef __bridge_retain

#define __bridge_retain

#endif

 

#ifndef __bridge_retained

#define __bridge_retained

#endif

 

#ifndef __autoreleasing

#define __autoreleasing

#endif

 

#ifndef __strong

#define __strong

#endif

 

#ifndef __unsafe_unretained

#define __unsafe_unretained

#endif

 

#ifndef __weak

#define __weak

#endif

#endif

 

#if __has_feature(objc_arc)

#define SAFE_ARC_PROP_RETAIN strong

#define SAFE_ARC_RETAIN(x) (x)

#define SAFE_ARC_RELEASE(x)

#define SAFE_ARC_AUTORELEASE(x) (x)

#define SAFE_ARC_BLOCK_COPY(x) (x)

#define SAFE_ARC_BLOCK_RELEASE(x)

#define SAFE_ARC_SUPER_DEALLOC()

#define SAFE_ARC_AUTORELEASE_POOL_START() @autoreleasepool {

#define SAFE_ARC_AUTORELEASE_POOL_END() }

#else

#define SAFE_ARC_PROP_RETAIN retain

#define SAFE_ARC_RETAIN(x) ([(x) retain])

#define SAFE_ARC_RELEASE(x) ([(x) release])

#define SAFE_ARC_AUTORELEASE(x) ([(x) autorelease])

#define SAFE_ARC_BLOCK_COPY(x) (Block_copy(x))

#define SAFE_ARC_BLOCK_RELEASE(x) (Block_release(x))

#define SAFE_ARC_SUPER_DEALLOC() ([super dealloc])

#define SAFE_ARC_AUTORELEASE_POOL_START() NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

#define SAFE_ARC_AUTORELEASE_POOL_END() [pool release];

#endif

 
//
http://raptureinvenice.com/arc-support-without-branches/
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章