标签: libextobjc

iOS正确使用@weakify(self)和@strongify(self)

我开始libextobjc(集成https://github.com/jspahrsummers/libextobjc)到我的iOS应用程序主要是为了充分利用EXTScope的中@strongify@weakify,但也继续深入过程之前,有几个问题.

这是一个有意过度复杂的例子,试图解决如何处理这个问题:

- (void)someMethod {
    if (self.someBOOL) {
        _someObjectInstanceVar = [Object objectWithCompletionHandler:^{
            // self reference #1
            if (self.someProperty) {
                // self reference #2
                [[Async HTTPRequest] sendAWithID:self.property.id completionHandler:^(void (^)(NewObject *newObject) {
                    // self reference #3
                    [self showViewWithObject:newObject handler:^{
                        // self reference #4
                        [self reloadData];
                    }];
                }];
            }
        }];

    else {
        [[Async HTTPRequest] sendBWithID:self.property.id completionHandler:^{
            // self reference #5
            [self reloadData];
        }];
    }
}
Run Code Online (Sandbox Code Playgroud)

我的理解是,如果我想做异步HTTP请求之类的事情,并且在完成处理程序引用self内部,比如[self reloadData],我不需要对强/弱做任何事情,因为请求块本身没有保留完成块,那里保留周期没有问题.在上面的代码示例中,我认为#5是保留周期不是问题的情况.

主要关注的是所有将块作为属性/ init参数的对象,这些对象内部保留在块属性上.在objectWithCompletionHandler方法内部,someObject作为实例变量保存在completionHandler块中,有多个对self的引用,我知道这会引起泄漏.我的主要问题是在这种情况下,您需要如何处理 …

objective-c ios libextobjc

42
推荐指数
2
解决办法
2万
查看次数

解释ReactiveCocoa/libextobjc中的弱化和强化工作方式

我知道你应该使用@weakify @strongify来避免保留周期,但我不完全理解它们是如何实现这一目的的?

reactive-cocoa libextobjc

22
推荐指数
2
解决办法
8013
查看次数

标签 统计

libextobjc ×2

ios ×1

objective-c ×1

reactive-cocoa ×1