在AppKit中,宏NS_AVAILABLE_MAC随处可见,如下:
@property (nullable, assign) id<NSSearchFieldDelegate> delegate NS_AVAILABLE_MAC(10_11);
顾名思义,我对NS_AVAILABLE_MAC最初的理解是,NSSearchFieldDelegate只能在OSX 10.11及以上版本才能使用。在OSX 10.10.4进一步验证,如下图所示:
然而,今天发现,NSSearchFieldDelegate在OSX 10.10.4中运行得好好的,代码如下:
self.searchField.delegate = self; //没有这句,mac微信的搜索功能就跪了
这是为什么呢?望各路大神指点!
猜测如下:
NSSearchFieldDelegate在OSX 10.10中是实现了的,但是其中有些属性/变量/函数是10.11及以上版本才能用,所以苹果猥琐地给出了"Symbol Not Found"的提示,防止误用,NS_AVAILABLE_MAC只是最佳实践推荐值,并非严格定死。
当然,在给delegate赋值时,最好先判断setDelegate函数是否存在,即NSSearchFieldDelegate是否可用,以免crash,代码如下:
if ([self.searchField respondsToSelector:@selector(setDelegate:)]) { self.searchField.delegate = self;}