假设在iOS中,我们有:

在W2AppDelegate.m中:

GlobalViewController * globalVc;

-(BOOL)应用程序:(UIApplication *)应用程序didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
...

}


在SomeOtherViewController.m中:

-(void)viewDidLoad {
    [super viewDidLoad];

    [globalVc doSomething ^ {
       [globalVc.someVariable doSomethingElse]; //这里有保留周期吗?
    }];
}


这里是否存在保留周期,因为我们在该块内部强烈引用了globalVc。

globalVc->块-> globalVc

最佳答案

这里是否存在保留周期,因为我们在该块内部强烈引用了globalVc。


否。因为块仅捕获局部变量。

[globalVc doSomething^{
   [globalVc.someVariable doSomethingElse]; // Is there a retain cycle here?
}];


块未捕获globalVc,因为globalVc是全局变量。这里没有局部变量,因此该块不会捕获任何对象,因此该块根本不会保留任何对象。

10-08 12:30