有時(shí)我們寫(xiě)個(gè)代碼開(kāi)源出來(lái)給別人用時(shí),會(huì)被其他開(kāi)發(fā)者抱怨編譯不了,很多情況是版本的問(wèn)題,尤其現(xiàn)在ARC的出現(xiàn)后關(guān)于weak,strong的問(wèn)題讓人頭疼。
有個(gè)開(kāi)源代碼這里做的很不錯(cuò),就是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,相當(dāng)于ARC的strong
iOS5的ARC中weak能在銷(xiāo)毀時(shí)自動(dòng)賦值nil,這是iOS4.x上使用ARC不具備,所以用的unsafe,非ARC自然是assign