首页 > 代码库 > 记录群聊天关于block内部引用问题
记录群聊天关于block内部引用问题
// %p &testStr 是object自身的内存地址 // %p testStr 是指向的内存地址 // block本质是对象,访问外部变量当成自己的成员变量 // block内有一个新的引用,指向原对象所指向的内存地址
对于对象:
@autoreleasepool { NSMutableString *testStr = [[[NSMutableString alloc]initWithString:@"String"] autorelease]; NSLog(@" NORMAL : %@, %p, %p", testStr, testStr, &testStr); dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{ [testStr appendString:@" Append"]; NSLog(@"Bgroud : %@, %p, %p", testStr, testStr, &testStr); }); NSLog(@" Append : %@, %p, %p", testStr, testStr, &testStr); }
打印结果:
2014-05-23 09:38:13.772 PPPTest[1839:60b] NORMAL : String, 0x8e74cd0, 0xbfffc8c4 2014-05-23 09:38:13.772 PPPTest[1839:60b] Append : String, 0x8e74cd0, 0xbfffc8c4 2014-05-23 09:38:13.772 PPPTest[1839:1303] Bgroud : String Append, 0x8e74cd0, 0x8e74e94
对于基本类型:
@autoreleasepool { __block int nInt = 10; NSLog(@" : %d, %p", nInt, &nInt); dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{ ++nInt; NSLog(@"bg : %d, %p", nInt, &nInt); }); ++nInt; NSLog(@" ++ : %d, %p", nInt, &nInt); }
打印结果:
2014-05-23 09:38:54.446 PPPTest[1851:60b] : 10, 0xbfffc8c8 2014-05-23 09:38:54.446 PPPTest[1851:60b] ++ : 11, 0x8d7be50 2014-05-23 09:38:54.446 PPPTest[1851:1303] bg : 12, 0x8d7be50
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。