找回密码
 立即注册
搜索

本文来自

iOS开发交流区

iOS开发交流区

人已关注

请添加对本版块的简短描述

请教一个关于内存的问题

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
QQ
499 xpxpxp 发表于 2018-5-14 15:04:15
Restore the connection to “测试机” and run “AAA” again, or if “AAA” is still running, you can attach to it by selecting Debug > Attach to Process > AAA
Xcode报了这个错,然后程序就停掉了。网上查了一下,说是
这是因为应用程序突然消耗了大量内存,然后再分配调度内存的时候,出现错误,致使系统将APP进程关闭。



我看了一下自己的代码,找到了规律:我在点击Button的时候会进去A界面,然后socket开始不断的接收数据,我通过一个while循环处理数据,此时没有任何问题。但是当我返回上一个界面,再次点击Button进入A界面,同样通过socket开始不断的接收数据,此时我再去用while循环处理数据,就会报这个错了。。。


有没有大神能告诉我有可能是因为什么造成的。。。
急急急!!!
[ 此帖被蓝色时光在2018-04-28 17:36重新编辑 ]




上一篇:为何view不能设置约束,以便让我适配iphonx?
下一篇:iTunes Connect中 导入此构建版本时出错
楼主热帖
sukeryan 发表于 2018-5-14 17:10:46
这周一开始搞这个东西,真的是心力交瘁啊。。。
回复

使用道具 举报

adsl3g 发表于 2018-5-14 17:21:12
最后发现如果只切割数据不去解码的话就不会崩,所以是解码器的问题,搞了下算是临时解决了,不知道后面会不会有别的问题。。。
回复

使用道具 举报

henryge0011 发表于 2018-5-14 17:44:18
放弃吧  你想想 从sps中获取宽高 也就是说你每次接收到消息都得去算半天 ,估计会影响显示帧率的  我觉得还是直接让android告诉你快速简单一点

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

hclb9921 发表于 2018-5-14 19:56:45
目前只获取到最开始的宽高,还是不能每一帧画面都获取宽高,网上说可以从SPS中获取,都是些C++、java代码,没研究明白。。。
回复

使用道具 举报

snow820128 发表于 2018-5-14 19:56:46
Restore the connection to “测试机” and run “AAA” again, or if “AAA” is still running, you can attach to it by selecting Debug > Attach to Process > AAA
Xcode报了这个错,然后程序就停掉了。网上查了一下,说是
这是因为应用程序突然消耗了大量内存,然后再分配调度内存的时候,出现错误,致使系统将APP进程关闭。



我看了一下自己的代码,找到了规律:我在点击Button的时候会进去A界面,然后socket开始不断的接收数据,我通过一个while循环处理数据,此时没有任何问题。但是当我返回上一个界面,再次点击Button进入A界面,同样通过socket开始不断的接收数据,此时我再去用while循环处理数据,就会报这个错了。。。


有没有大神能告诉我有可能是因为什么造成的。。。
急急急!!!
[ 此帖被蓝色时光在2018-04-28 17:36重新编辑 ]
回复

使用道具 举报

ttmd 发表于 2018-5-14 20:00:53
哈哈  又看到你啦 很有缘。
我想知道你那个获取宽高的是怎么解决了呢?
回复

使用道具 举报

米有爱 发表于 2018-5-14 21:39:38
感觉自己之前写过一个和你描述的好相似  也不知道能不能帮到你
while(1){

    char buffer[10000];
    ssize_t len = recv(CFSocketGetNative(cfSocket), buffer, sizeof(buffer), 0);
   @autoreleasepool{
//第一步/先将数据拼接起来
    [self.data appendBytes:buffer length:len];
   
//第二步开始根据自己的格式解析切割  (假设我的格式是每包的前八位存放账着这一完整nalu的长度,因为有可能一次发不完全你得拼接 或者一次发了多个你得切割);
    int buf_size = 0;
    [self.data getBytes:&buf_size length:8];//假设buf_size=1000;
//第三步 判断自己的data长度有没有>=buf_size 如果满足代表接受到一个完整的nalu 切割丢弃旧数据 并且解析
   if(_data.length >= buf_size &&buf_size >8){
      NSData *nalu_data = [_data subdataWithRange:NSMakeRange(8,buf_size-8);
     [_decoder decodeNalu:nalu_data withSize:nalu_data.length];   //去解码
//第四步 将使用过的数据丢弃 释放内存
        NSData *sub_data = [_data subDataWithRange:NSMakeRange(buf_size,_data.length-buf_size)];
        [_data setLength:0];
        [ _data appendData:subData];
        subData = nil;
        imgData = nil;
    }

  }


}
回复

使用道具 举报

jjkk 发表于 2018-5-14 23:42:50
while循环里是根据固定的格式切割数据然后进行处理
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则