小编rua*_*dao的帖子

initializeBufferWithCopyOfBuffer上的iOS内存泄漏

我下载图像时发现内存泄漏,但我从来没有发现任何循环保留吗?

在此输入图像描述

在此输入图像描述

在此输入图像描述

在此输入图像描述

代码:

class DetailVCHeaderPictuerScrollViewCell: UICollectionViewCell {

    ...
    var item: DetailVCHeaderPictuerScrollViewCellItem! {
        didSet {
            var ip = indexPath

            // memory was leak on the follow line
            DownloadImgOnMain(item.img, { [weak self](img, finished) -> Void in
                if self == nil { return }
                if ip == self?.indexPath {
                    self?.imageV.image = img
                }
            })
        }
    }
    ...
}

func DownloadImgOnMain(url: String, callback: (img: UIImage?, finished: Bool)->Void) {
    SDWebImageDownloader
    .sharedDownloader()
    .downloadImageWithURL(NSURL(string: url)!,
        options: SDWebImageDownloaderOptions.allZeros,
        progress: nil) { (img, data, err, finished) -> Void in

        DispatchBlockOnMainSafe({ …
Run Code Online (Sandbox Code Playgroud)

memory-leaks ios swift

6
推荐指数
0
解决办法
215
查看次数

理解用对象C编程的块

关于教程promgrammingWithObjectiveC.

下面的代码让我迷惑:

在处理返回块或将其他块作为参数的块时,自定义类型定义特别有用.请考虑以下示例:

void (^(^complexBlock)(void (^)(void)))(void) = ^ (void (^aBlock)(void)) {
    ...
    return ^{
        ...
    };
};
Run Code Online (Sandbox Code Playgroud)

complexBlock变量引用一个块,该块将另一个块作为参数(aBlock)并返回另一个块.

重写代码以使用类型定义使这更具可读性:

typedef void (^XYZSimpleBlock)(void);
XYZSimpleBlock (^betterBlock)(XYZSimpleBlock) = ^ (XYZSimpleBlock aBlock) {
    ...
    return ^{
        ...
    };
};
Run Code Online (Sandbox Code Playgroud)

我的重写代码: 在此输入图像描述 但我无法理解源代码:

void (^(^complexBlock)(void (^)(void)))(void) = ^ (void (^aBlock)(void)) {
    ...
    return ^{
        ...
    };
}
Run Code Online (Sandbox Code Playgroud)

据我所知,它应该是:

(void (^) (void)) (^complexBlock) (void (^)(void) = ^ (void (^aBlock)(void)) {
    ...
    return ^{
        ...
    };
};
Run Code Online (Sandbox Code Playgroud)

objective-c ios objective-c-blocks

2
推荐指数
1
解决办法
191
查看次数