Tôi muốn sử dụng biến __block để nhận giá trị trong khối. Nhưng khi ra khỏi khối, biến __block có vẻ là không. Tại sao điều này sẽ xảy ra?Biến "__block" dẫn đến giá trị nil khi đi ra khỏi khối
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;
Khi tôi thay đổi mã thành [path copy], nó hoạt động. Nhưng tôi không biết đây có phải là một ý hay hay không. Mọi quyết định?
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];
Đó là những tình huống như thế này khiến tôi vui mừng khi nhóm của tôi quyết định nắm lấy ARC. –