在AppKit中挠他,宏NS_AVAILABLE_MAC隨處可見扳抽,如下:
@property (nullable, assign) id<NSSearchFieldDelegate> delegate NS_AVAILABLE_MAC(10_11);
顧名思義,我對(duì)NS_AVAILABLE_MAC最初的理解是殖侵,NSSearchFieldDelegate只能在OSX 10.11及以上版本才能使用贸呢。在OSX 10.10.4進(jìn)一步驗(yàn)證,如下圖所示:
然而拢军,今天發(fā)現(xiàn)楞陷,NSSearchFieldDelegate在OSX 10.10.4中運(yùn)行得好好的,代碼如下:
self.searchField.delegate = self; //沒(méi)有這句茉唉,mac微信的搜索功能就跪了
這是為什么呢固蛾?望各路大神指點(diǎn)!
猜測(cè)如下:
NSSearchFieldDelegate在OSX 10.10中是實(shí)現(xiàn)了的度陆,但是其中有些屬性/變量/函數(shù)是10.11及以上版本才能用艾凯,所以蘋果猥瑣地給出了"Symbol Not Found"的提示,防止誤用懂傀,NS_AVAILABLE_MAC只是最佳實(shí)踐推薦值趾诗,并非嚴(yán)格定死。
當(dāng)然鸿竖,在給delegate賦值時(shí)沧竟,最好先判斷setDelegate函數(shù)是否存在,即NSSearchFieldDelegate是否可用缚忧,以免crash悟泵,代碼如下:
if ([self.searchField respondsToSelector:@selector(setDelegate:)]) { self.searchField.delegate = self;}