何时复制块?该文档说,块“在执行从定义它们的范围返回时被删除。这意味着你不能直接从函数中返回它们。如果块只能在其定义范围仍在调用堆栈上时使用,它们不会像实际那样有用”
因此,这是我尝试过的代码,希望在 viewDidLoad 中执行完成后删除该块。
MyReaderController.h
@interface MyReaderController : UIViewController
{
myBlockVar aBlockVar;
}
-(myBlockVar) getABlock;
@end
MyReaderController.m
@implementation MyReaderController
- (void)viewDidLoad
{
[super viewDidLoad];
aBlockVar=[self getABlock];
NSLog(@"Block Result = %f",aBlockVar(1));
}
-(void) viewDidDisappear:(BOOL)animated{
[super viewDidDisappear:animated];
NSLog(@"Block Exists even after the execution completes=%@ %f",aBlockVar,aBlockVar(5));
}
-(myBlockVar) getABlock{
return ^(int var){return 4.0f;};
}
@end
那么,此代码是否需要将 viewDidLoad 更改为如下所示,如果不需要,那么我应该何时使用它。
- (void) viewDidLoad{
[super viewDidLoad];
aBlockVar=Block_copy([self getABlock]);
NSLog(@"Block Result = %f",aBlockVar(1));
}
第2部分
后来我尝试使用以下代码,希望现在它会在 viewDidDisappear 中将 aBlockVar 作为 nil obj 返回。
- (void)viewDidLoad
{
[super viewDidLoad];
Blocker *blocker=[[Blocker alloc] init];
myBlockVar myVar=[blocker getABlock];
aBlockVar=myVar;
NSLog(@"Block Result = %f",aBlockVar(1));
blocker=nil;
myVar=nil;
}
拦截器.m
#import "Blocker.h"
@implementation Blocker
-(myBlockVar) getABlock{
return ^(int var){return 4.0f;};
}
@end