美文网首页
mac开发系列12:对NS_AVAILABLE_MAC的困惑

mac开发系列12:对NS_AVAILABLE_MAC的困惑

作者: 悲观患者 | 来源:发表于2017-08-14 11:34 被阅读50次

在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;}

相关文章

网友评论

      本文标题:mac开发系列12:对NS_AVAILABLE_MAC的困惑

      本文链接:https://www.haomeiwen.com/subject/iffurxtx.html