有時我們寫個代碼開源出來給別人用時,會被其他開發者抱怨編譯不了,很多情況是版本的問題,尤其現在ARC的出現后關于weak,strong的問題讓人頭疼。
有個開源代碼這里做的很不錯,就是MBProgressHUD
看下他是怎么做的:
- #ifndef MB_STRONG
- #if __has_feature(objc_arc)
- #define MB_STRONG strong
- #else
- #define MB_STRONG retain
- #endif
- #endif
-
- #ifndef MB_WEAK
- #if __has_feature(objc_arc_weak)
- #define MB_WEAK weak
- #elif __has_feature(objc_arc)
- #define MB_WEAK unsafe_unretained
- #else
- #define MB_WEAK assign
- #endif
- #endif
非ARC的retain,相當于ARC的strong
iOS5的ARC中weak能在銷毀時自動賦值nil,這是iOS4.x上使用ARC不具備,所以用的unsafe,非ARC自然是assign