MBProgressHUD中使用block模块,模块内从网络获取数据,界面上显示”请稍后…“ 请问从网络接口获取到的数据应该如何传递到block外部? 因为返回的数据存放在block内部开辟的内存中,大小只有返回的时候才知道, 请问这样的数据应该如何高效的传出? |
|
20分 |
在 block 里直接把数据赋值给当前的类: [hud showAnimated:YES whileExecutingBlock:^{ // 网络请求... self.data = data; }]; |
请问self.data=data;这一句, 是将data的地址传给self.data,还是实行一次内存拷贝? |
|
一般是将地址传给 sefl.data |
|
传地址应该没有用,data中的数据出了block就变成nil了,data是在block内部开辟的内存,大小不固定。。。 |
|
data 中的数据会不会释放主要看你用的是什么内存管理策略,如果 self.data 是这样的: |
|
抱歉, block内部堆上开辟的内存,在外部是可以使用的,block内部栈上的内容外部不能使用,这种方法可以将数据传出! |
|
我用的是非arc, 这种方法是可以的。 请问你说的 |
|
data 的实例是 NSData 的情况下,strong 等同于 copy,都是指针引用;如果 data 的实例是 NSMutableData,copy 将做内存拷贝。 |
|
data的实例是一个C++类,我将这个实例的指针传递给self.data(相同的C++类指针),block外部就可以使用了! |
|
恩, 通过 malloc 分配在堆上就行
|