ブロック内で値を取得するには__block変数を使用します。しかし、ブロック外になると、__block変数はゼロに見えます。なぜこれが起こるのだろうか?ブロック外に出ると "__block"変数は無限値になります
NSString *fileName = [Tools MD5Encode:url];
__block NSString *filePath = nil;
[fileList enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
NSString *aFileName = obj;
if ([aFileName isEqualToString:fileName]) {
NSString *path = [VERSIONS_INFO_DATA_DIRECTORY stringByAppendingPathComponent:aFileName];
filePath = path;
NSLog(@"filePath1 %@", filePath);
*stop = YES;
}
}];
//NSLog(@"filePath2 %@", filePath);
//filePath seems to be nil
return filePath;
コードを[パスコピー]に変更すると動作します。しかし、私はこれが良い考えであるかどうか分かりません。どんな決定?
NSString *fileName = [Tools MD5Encode:url];
__block NSString *filePath = nil;
[fileList enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
NSString *aFileName = obj;
if ([aFileName isEqualToString:fileName]) {
NSString *path = [VERSIONS_INFO_DATA_DIRECTORY stringByAppendingPathComponent:aFileName];
filePath = [path copy];
NSLog(@"filePath1 %@", filePath);
*stop = YES;
}
}];
//NSLog(@"filePath2 %@", filePath);
return [filePath autorelease];
私のチームがARCを採用することを決心したのは、このような状況です。 –