之前有一个项目采用的是 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 下发现有类似的搜索结果,点了几步发现原来是这样:
需要改下项目中的 podspec。对于这种 corner case 而言,pods 应该给出提示的好吗,明明有相应的选项了,再提示下不行吗 orz...
另外举一反三一下,似乎目前的 Dispatch objects 都是 Objc 对象并可又 ARC 管理了,见:What property should I use for a Dispatch Queue after ARC?
希望可以帮到遇到类似问题的朋友吧 :)