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

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

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

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

请问这样的数据应该如何高效的传出?
...全文
140 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;
}];
源码直接下载地址: https://pan.quark.cn/s/854bd57df23a 在金融行业中,房产购置贷款是众多人在购置不动产时必须进行的一项财务规划。Matlab作为一种功能强大的数学及数据分析平台,经常被应用于各类复杂的运算,其中包括住房贷款的计算。本文将详细研究运用Matlab开发住房贷款计算程序的相关知识要点,以协助读者掌握如何借助编程技术处理实际的信贷问题。 1. **信贷种类** - **商业信贷**:此类贷款通常由金融机构提供,其利率会随市场行情变化,借款人可选用固定利率或浮动利率方案。 - **公积金信贷**:该类贷款获得政府机构的支持,利率一般低于商业信贷,但设有最高贷款金额的限制。 2. **偿付模式** - **等额本金偿付**:每月支付相同数量的本金,利息部分逐月减少,因此整体还款总额会逐步降低。 - **等额本息偿付**:每月支付固定金额的本金与利息组合,利息部分随本金的逐月减少而递减。 3. **住房贷款计算公式** - **等额本息偿付**:每月还款额=贷款本金×[月利率×(1+月利率)^(贷款期数)]÷[(1+月利率)^(贷款期数)-1]。 - **等额本金偿付**:每月应还本金=贷款总额/贷款期数,每月利息=(贷款余额-累计已还本金)×月利率。 4. **Matlab编程基础** - **变量设定**:在Matlab环境中,首要任务是设定贷款数额、年化利率、贷款时长等核心参数。 - **循环控制结构**:借助for循环来模拟每个还款周期的过程,进行本金与利息的计算。 - **函数构建**:将住房贷款的计算逻辑封装为函数,便于重复使用和测试不同条件下的结果。 5. **Matlab代码编写** - **等额本息函数实现**...

29,038

社区成员

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

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