我在 Objective-C 中使用 ^blocks 时遇到了一些问题。我正在尝试从一个块中设置一个实例变量 - 我已经阅读了一些关于该主题的 Apple 文档,我觉得我已经尝试了所有方法。
@interface MyClass
{
// I have tried all possible combinations using __weak, __strong and __block.
__weak __block NSMutableArray *filenames;
}
// *.m
static ASIFormDataRequest *g_request = nil;
@implementation MyClass
-(void) funnymethod
{
filenames = [NSMutableArray array];
[filenames addObject:@"This is a string."];
NSLog(@"%@", filenames);
g_request = [InitializerClass initializeRequest];
[g_request setCompletionBlock:^
{
filenames = [NSMutableArray array];
[filenames addObject:@"This is another string."];
NSLog(@"%@", filenames);
}];
[g_object startASynchronous];
}
@end
上面的代码给出了以下输出: ( "This is a string." ) (null)
太糟糕了。所以,我尝试了 __weak、__strong 和 __block 的不同组合——其他任何东西都会给出以下输出:(“这是一个字符串。”)(“这是另一个字符串。”)但是!有一个巨大的但是。完成块永远不会退出。顶部栏中指示打开连接的活动指示器一直在旋转,并且屏幕变得无响应。
如何从块内成功设置文件名对象?提前致谢。