iOS 6 之后的 dispatch_semaphore_t

之前有一个项目采用的是 MRR,今天在将其转 ARC 时有一个小问题,就是 Xcode 提示 dispatch_semaphore_t 要使用 strong 这个 property attribute 去修饰,而我使用的是 assign

出现这个提示的原因是 dispatch_semaphore_t 在 iOS 6.0 之后,被直接作为 Objc 对象并可交由 ARC 管理。所以简单的按照提示将项目中的几处 assign 改为 strong 就可以了,改完之后 analyze 下没有问题。

随后,我在另一对其有依赖的项目中使用 pod update,出现这样的错误提示:

dispatch_semaphore_t Property with 'retain (or strong)' attribute must be of object type

看看提示的内容,这不是在逗我?刚告诉我 dispatch_semaphore_t 可以作为 Objc 对象由 ARC 管理,现在又提示我它不是对象,不能使用 strong 修饰?当前的项目是 iOS 9.0 好吗!

正当我觉得自己踩了屎的时候,突然想到是不是 pods 的问题,于是 google 下发现有类似的搜索结果,点了几步发现原来是这样:

https://github.com/AFNetworking/AFNetworkActivityLogger/commit/4aaa49fcaa887183e950e7617b76335b868684ed

iOS 6 之后的 dispatch_semaphore_t_第1张图片

需要改下项目中的 podspec。对于这种 corner case 而言,pods 应该给出提示的好吗,明明有相应的选项了,再提示下不行吗 orz...

另外举一反三一下,似乎目前的 Dispatch objects 都是 Objc 对象并可又 ARC 管理了,见:What property should I use for a Dispatch Queue after ARC?

希望可以帮到遇到类似问题的朋友吧 :)

你可能感兴趣的:(iOS 6 之后的 dispatch_semaphore_t)