Maz*_*yod 4 objective-c instance-variables objective-c-blocks
我有以下代码:
- (void)downloadPressed:(id)sender {
[_download startDownloadWithParser:^id(NSData *rawData) {
NSString* downloadName = [[_download url] lastPathComponent];
// ... more code
}];
[self reloadView];
}
Run Code Online (Sandbox Code Playgroud)
这段代码位于一个内部UITableViewCell,众所周知,重用机制应该特别注意..
我的问题,简洁明了:
如果我在块之后添加以下代码行:
_download = nil;
Run Code Online (Sandbox Code Playgroud)
该_download区块内的变量也被nil'd!我希望得到一份副本,怎么样?
如果您希望您的块获得ivar的副本,请从中创建一个局部变量,并使用块内的本地变量而不是ivar:
-(void)downloadPressed:(id)sender {
MyDownload *tmp = _download; // Make an independent pointer
[tmp startDownloadWithParser:^id(NSData *rawData) { // Use the local
NSString* downloadName = [[tmp url] lastPathComponent];
// ... more code
}];
[self reloadView];
}
Run Code Online (Sandbox Code Playgroud)
该块将在创建块对象时捕获该局部变量的值,使所有后续更改对_download块不可见.
| 归档时间: |
|
| 查看次数: |
1678 次 |
| 最近记录: |