objective-c – 奇怪的__block存储变量崩溃

objective-c – 奇怪的__block存储变量崩溃,第1张

概述我的代码中有一个问题,我已经提炼到以下(愚蠢)的例子 NSArray *array = [NSArray arrayWithObjects:@"1", @"2", @"3", nil];__block NSString *a = @"-1";[array enumerateObjectsUsingBlock:^(id whoCares, NSUInteger idx, BOOL *stop 我的代码中有一个问题,我已经提炼到以下(愚蠢)的例子

NSArray *array = [NSArray arrayWithObjects:@"1",@"2",@"3",nil];__block Nsstring *a = @"-1";[array enumerateObjectsUsingBlock:^(ID whoCares,NSUInteger IDx,BOol *stop) {    a = [Nsstring stringWithFormat:@"%@ %d",a,IDx];    NSLog(@"%@",a);}];NSLog(@"%@",a);

这段代码有效,但如果我注释掉第一个NSLog(在块中)代码崩溃了.但是,如果我将格式字符串更改为以下内容

a = [Nsstring stringWithFormat:@"%d",IDx];

然后代码运行正常,没有块内的NSLog.

这里发生了什么?我希望我只是误解了一些事情.

解决方法 stringWithFormat:为您提供一个自动释放的对象,您不会保留该对象.当块退出并且您调用NSLog时,可能已经取消分配.

一种解决方案可能是使用可变字符串并每次附加到它而不是重新分配.

NSArray *array = [NSArray arrayWithObjects:@"1",nil];NSMutableString *a = [NSMutableString stringWithFormat:@"-1"];[array enumerateObjectsUsingBlock:^(ID whoCares,BOol *stop) {    [a appendFormat:@" %d",IDx];}];NSLog(@"%@",a);
总结

以上是内存溢出为你收集整理的objective-c – 奇怪的__block存储变量崩溃全部内容,希望文章能够帮你解决objective-c – 奇怪的__block存储变量崩溃所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/langs/1229600.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-06
下一篇2022-06-06

发表评论

登录后才能评论

评论列表(0条)

    保存