MBProgressHUD中的返回值该如何传出??

ylongwu 2015-04-21 06:47:00
MBProgressHUD中使用block模块,模块内从网络获取数据,界面上显示”请稍后...“

请问从网络接口获取到的数据应该如何传递到block外部?

因为返回的数据存放在block内部开辟的内存中,大小只有返回的时候才知道,

请问这样的数据应该如何高效的传出?
...全文
105 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
ylongwu 2015-04-23
  • 打赏
  • 举报
回复
引用 5 楼 zhangao0086 的回复:
[quote=引用 4 楼 ylongwu 的回复:] [quote=引用 3 楼 zhangao0086 的回复:] [quote=引用 2 楼 ylongwu 的回复:] [quote=引用 1 楼 zhangao0086 的回复:] 在 block 里直接把数据赋值给当前的类:

[hud showAnimated:YES whileExecutingBlock:^{
    // 网络请求...
    self.data = data;
}];
请问self.data=data;这一句, 是将data的地址传给self.data,还是实行一次内存拷贝?[/quote] 一般是将地址传给 sefl.data[/quote] 传地址应该没有用,data中的数据出了block就变成nil了,data是在block内部开辟的内存,大小不固定。。。[/quote] data 中的数据会不会释放主要看你用的是什么内存管理策略,如果 self.data 是这样的: @property (nonatomic, strong) NSData *data; 或者 @property (nonatomic, copy) NSData *data; 则是不会被释放的[/quote] 我用的是非arc, 这种方法是可以的。 请问你说的 @property (nonatomic, strong) NSData *data; 或者 @property (nonatomic, copy) NSData *data; 这两种,都是内存拷贝还是指针传值? 其实不管是内存拷贝还是指针传值,都可以将数据传到block外部,指针传值效率更高一些。
ylongwu 2015-04-23
  • 打赏
  • 举报
回复
引用 3 楼 zhangao0086 的回复:
[quote=引用 2 楼 ylongwu 的回复:] [quote=引用 1 楼 zhangao0086 的回复:] 在 block 里直接把数据赋值给当前的类:

[hud showAnimated:YES whileExecutingBlock:^{
    // 网络请求...
    self.data = data;
}];
请问self.data=data;这一句, 是将data的地址传给self.data,还是实行一次内存拷贝?[/quote] 一般是将地址传给 sefl.data[/quote] 抱歉, block内部堆上开辟的内存,在外部是可以使用的,block内部栈上的内容外部不能使用,这种方法可以将数据传出!
Bannings 2015-04-23
  • 打赏
  • 举报
回复
引用 4 楼 ylongwu 的回复:
[quote=引用 3 楼 zhangao0086 的回复:] [quote=引用 2 楼 ylongwu 的回复:] [quote=引用 1 楼 zhangao0086 的回复:] 在 block 里直接把数据赋值给当前的类:

[hud showAnimated:YES whileExecutingBlock:^{
    // 网络请求...
    self.data = data;
}];
请问self.data=data;这一句, 是将data的地址传给self.data,还是实行一次内存拷贝?[/quote] 一般是将地址传给 sefl.data[/quote] 传地址应该没有用,data中的数据出了block就变成nil了,data是在block内部开辟的内存,大小不固定。。。[/quote] data 中的数据会不会释放主要看你用的是什么内存管理策略,如果 self.data 是这样的: @property (nonatomic, strong) NSData *data; 或者 @property (nonatomic, copy) NSData *data; 则是不会被释放的
ylongwu 2015-04-23
  • 打赏
  • 举报
回复
引用 3 楼 zhangao0086 的回复:
[quote=引用 2 楼 ylongwu 的回复:] [quote=引用 1 楼 zhangao0086 的回复:] 在 block 里直接把数据赋值给当前的类:

[hud showAnimated:YES whileExecutingBlock:^{
    // 网络请求...
    self.data = data;
}];
请问self.data=data;这一句, 是将data的地址传给self.data,还是实行一次内存拷贝?[/quote] 一般是将地址传给 sefl.data[/quote] 传地址应该没有用,data中的数据出了block就变成nil了,data是在block内部开辟的内存,大小不固定。。。
Bannings 2015-04-23
  • 打赏
  • 举报
回复
引用 2 楼 ylongwu 的回复:
[quote=引用 1 楼 zhangao0086 的回复:] 在 block 里直接把数据赋值给当前的类:

[hud showAnimated:YES whileExecutingBlock:^{
    // 网络请求...
    self.data = data;
}];
请问self.data=data;这一句, 是将data的地址传给self.data,还是实行一次内存拷贝?[/quote] 一般是将地址传给 sefl.data
ylongwu 2015-04-23
  • 打赏
  • 举报
回复
引用 1 楼 zhangao0086 的回复:
在 block 里直接把数据赋值给当前的类:

[hud showAnimated:YES whileExecutingBlock:^{
    // 网络请求...
    self.data = data;
}];
请问self.data=data;这一句, 是将data的地址传给self.data,还是实行一次内存拷贝?
Bannings 2015-04-23
  • 打赏
  • 举报
回复
恩, 通过 malloc 分配在堆上就行
ylongwu 2015-04-23
  • 打赏
  • 举报
回复
引用 8 楼 zhangao0086 的回复:
[quote=引用 7 楼 ylongwu 的回复:] [quote=引用 5 楼 zhangao0086 的回复:] [quote=引用 4 楼 ylongwu 的回复:] [quote=引用 3 楼 zhangao0086 的回复:] [quote=引用 2 楼 ylongwu 的回复:] [quote=引用 1 楼 zhangao0086 的回复:] 在 block 里直接把数据赋值给当前的类:

[hud showAnimated:YES whileExecutingBlock:^{
    // 网络请求...
    self.data = data;
}];
请问self.data=data;这一句, 是将data的地址传给self.data,还是实行一次内存拷贝?[/quote] 一般是将地址传给 sefl.data[/quote] 传地址应该没有用,data中的数据出了block就变成nil了,data是在block内部开辟的内存,大小不固定。。。[/quote] data 中的数据会不会释放主要看你用的是什么内存管理策略,如果 self.data 是这样的: @property (nonatomic, strong) NSData *data; 或者 @property (nonatomic, copy) NSData *data; 则是不会被释放的[/quote] 我用的是非arc, 这种方法是可以的。 请问你说的 @property (nonatomic, strong) NSData *data; 或者 @property (nonatomic, copy) NSData *data; 这两种,都是内存拷贝还是指针传值? 其实不管是内存拷贝还是指针传值,都可以将数据传到block外部,指针传值效率更高一些。[/quote] data 的实例是 NSData 的情况下,strong 等同于 copy,都是指针引用;如果 data 的实例是 NSMutableData,copy 将做内存拷贝。 另外,OC 的对象只能分配在堆上。[/quote] data的实例是一个C++类,我将这个实例的指针传递给self.data(相同的C++类指针),block外部就可以使用了!
Bannings 2015-04-23
  • 打赏
  • 举报
回复
引用 7 楼 ylongwu 的回复:
[quote=引用 5 楼 zhangao0086 的回复:] [quote=引用 4 楼 ylongwu 的回复:] [quote=引用 3 楼 zhangao0086 的回复:] [quote=引用 2 楼 ylongwu 的回复:] [quote=引用 1 楼 zhangao0086 的回复:] 在 block 里直接把数据赋值给当前的类:

[hud showAnimated:YES whileExecutingBlock:^{
    // 网络请求...
    self.data = data;
}];
请问self.data=data;这一句, 是将data的地址传给self.data,还是实行一次内存拷贝?[/quote] 一般是将地址传给 sefl.data[/quote] 传地址应该没有用,data中的数据出了block就变成nil了,data是在block内部开辟的内存,大小不固定。。。[/quote] data 中的数据会不会释放主要看你用的是什么内存管理策略,如果 self.data 是这样的: @property (nonatomic, strong) NSData *data; 或者 @property (nonatomic, copy) NSData *data; 则是不会被释放的[/quote] 我用的是非arc, 这种方法是可以的。 请问你说的 @property (nonatomic, strong) NSData *data; 或者 @property (nonatomic, copy) NSData *data; 这两种,都是内存拷贝还是指针传值? 其实不管是内存拷贝还是指针传值,都可以将数据传到block外部,指针传值效率更高一些。[/quote] data 的实例是 NSData 的情况下,strong 等同于 copy,都是指针引用;如果 data 的实例是 NSMutableData,copy 将做内存拷贝。 另外,OC 的对象只能分配在堆上。
Bannings 2015-04-21
  • 打赏
  • 举报
回复
在 block 里直接把数据赋值给当前的类:

[hud showAnimated:YES whileExecutingBlock:^{
// 网络请求...
self.data = data;
}];

29,028

社区成员

发帖
与我相关
我的任务
社区描述
主要讨论与iOS相关的软件和技术
社区管理员
  • iOS
  • 大熊猫侯佩
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧