0

Grabkit是一个 Drop-in iOS 组件,可轻松从 Facebook、FlickR、Instagram、Picasa 导入照片

在 Grabkit 中,GRKXXXQuery 是将基于委托的查询转换为基于块的查询的包装器。GRKXXXGrabber 是基于块的类,它使用 GRKXXXQuery 从云服务中获取照片。

以 GRKFlickrXXX 为例。GRKFlickrGrabber 有一个 NSMutableArray 存储查询(在超类 GRKServiceGrabber 中)。在方法albumsOfCurrentUserAtPageIndex:withNumberOfAlbumsPerPage:andCompleteBlock:andErrorBlock:中,通过调用创建了一个查询(GRKFlickrQuery)并将其存储在 NSMutableArray 中registerQueryAsLoading:。查询将块作为参数,在 GRKFlickrQuery 中这些块存储为实例变量。self在这些街区中有

简单地说:GRKFlickrGrabber -> NSMutableArray(_queries) -> GRKFlickrQuery(query) -> block -> GRKFlickrGrabber(self)

所以这里有一个保留周期。但是当我使用仪器分析 Grabkit Demo 时,没有泄漏。他们是否使用了一些打破热天循环的技巧?

4

2 回答 2

1

仅当您希望在该对象的释放期间对该对象具有强引用的 Block 将被释放时,保留周期才有问题。如果 Block 因其他原因被销毁,那么在此之前 - 例如在查询运行之后 - 循环将被打破。

于 2013-07-28T06:18:34.440 回答
1

保留周期不一定会导致泄漏。当您希望在 dealloc 中清理对象(包括 ARC 的“自动”释放)时,这只是一个泄漏。如果您在异步请求结束时手动清除块属性,它可以正常工作。

于 2013-07-28T06:26:58.847 回答