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

iOS 码拜 9年前 (2015-05-11) 899次浏览 0个评论

MBProgressHUD中使用block模块,模块内从网络获取数据,界面上显示”请稍后…“

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

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

请问这样的数据应该如何高效的传出?

20分
本帖最后由 zhangao0086 于 2015-04-21 19:41:46 编辑

在 block 里直接把数据赋值给当前的类:

[hud showAnimated:YES whileExecutingBlock:^{
    // 网络请求...
    self.data = data;
}];
引用 1 楼 zhangao0086 的回复:

在 block 里直接把数据赋值给当前的类:

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

请问self.data=data;这一句, 是将data的地址传给self.data,还是实行一次内存拷贝?

引用 2 楼 ylongwu 的回复:
Quote: 引用 1 楼 zhangao0086 的回复:

在 block 里直接把数据赋值给当前的类:

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

请问self.data=data;这一句, 是将data的地址传给self.data,还是实行一次内存拷贝?

一般是将地址传给 sefl.data

引用 3 楼 zhangao0086 的回复:
Quote: 引用 2 楼 ylongwu 的回复:
Quote: 引用 1 楼 zhangao0086 的回复:

在 block 里直接把数据赋值给当前的类:

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

请问self.data=data;这一句, 是将data的地址传给self.data,还是实行一次内存拷贝?

一般是将地址传给 sefl.data

传地址应该没有用,data中的数据出了block就变成nil了,data是在block内部开辟的内存,大小不固定。。。

引用 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,还是实行一次内存拷贝?

一般是将地址传给 sefl.data

传地址应该没有用,data中的数据出了block就变成nil了,data是在block内部开辟的内存,大小不固定。。。

data 中的数据会不会释放主要看你用的是什么内存管理策略,如果 self.data 是这样的:
@property (nonatomic, strong) NSData *data;
或者
@property (nonatomic, copy) NSData *data;
则是不会被释放的

引用 3 楼 zhangao0086 的回复:
Quote: 引用 2 楼 ylongwu 的回复:
Quote: 引用 1 楼 zhangao0086 的回复:

在 block 里直接把数据赋值给当前的类:

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

请问self.data=data;这一句, 是将data的地址传给self.data,还是实行一次内存拷贝?

一般是将地址传给 sefl.data

抱歉, block内部堆上开辟的内存,在外部是可以使用的,block内部栈上的内容外部不能使用,这种方法可以将数据传出!

引用 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,还是实行一次内存拷贝?

一般是将地址传给 sefl.data

传地址应该没有用,data中的数据出了block就变成nil了,data是在block内部开辟的内存,大小不固定。。。

data 中的数据会不会释放主要看你用的是什么内存管理策略,如果 self.data 是这样的:
@property (nonatomic, strong) NSData *data;
或者
@property (nonatomic, copy) NSData *data;
则是不会被释放的

我用的是非arc, 这种方法是可以的。

请问你说的
@property (nonatomic, strong) NSData *data;
或者
@property (nonatomic, copy) NSData *data;
这两种,都是内存拷贝还是指针传值? 
其实不管是内存拷贝还是指针传值,都可以将数据传到block外部,指针传值效率更高一些。

引用 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,还是实行一次内存拷贝?

一般是将地址传给 sefl.data

传地址应该没有用,data中的数据出了block就变成nil了,data是在block内部开辟的内存,大小不固定。。。

data 中的数据会不会释放主要看你用的是什么内存管理策略,如果 self.data 是这样的:
@property (nonatomic, strong) NSData *data;
或者
@property (nonatomic, copy) NSData *data;
则是不会被释放的

我用的是非arc, 这种方法是可以的。

请问你说的
@property (nonatomic, strong) NSData *data;
或者
@property (nonatomic, copy) NSData *data;
这两种,都是内存拷贝还是指针传值? 
其实不管是内存拷贝还是指针传值,都可以将数据传到block外部,指针传值效率更高一些。

data 的实例是 NSData 的情况下,strong 等同于 copy,都是指针引用;如果 data 的实例是 NSMutableData,copy 将做内存拷贝。
另外,OC 的对象只能分配在堆上。

引用 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,还是实行一次内存拷贝?

一般是将地址传给 sefl.data

传地址应该没有用,data中的数据出了block就变成nil了,data是在block内部开辟的内存,大小不固定。。。

data 中的数据会不会释放主要看你用的是什么内存管理策略,如果 self.data 是这样的:
@property (nonatomic, strong) NSData *data;
或者
@property (nonatomic, copy) NSData *data;
则是不会被释放的

我用的是非arc, 这种方法是可以的。

请问你说的
@property (nonatomic, strong) NSData *data;
或者
@property (nonatomic, copy) NSData *data;
这两种,都是内存拷贝还是指针传值? 
其实不管是内存拷贝还是指针传值,都可以将数据传到block外部,指针传值效率更高一些。

data 的实例是 NSData 的情况下,strong 等同于 copy,都是指针引用;如果 data 的实例是 NSMutableData,copy 将做内存拷贝。
另外,OC 的对象只能分配在堆上。

data的实例是一个C++类,我将这个实例的指针传递给self.data(相同的C++类指针),block外部就可以使用了!

恩, 通过 malloc 分配在堆上就行

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明MBProgressHUD中的返回值该如何传出??
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!