美文网首页iOS开发iOS Developer
ios-NSData-->dataWithBytesNoC

ios-NSData-->dataWithBytesNoC

作者: 简鱼7819 | 来源:发表于2017-07-07 11:59 被阅读500次

    项目中遇到的问题,根据项目需要我需要把指定的数据(NSString,NSDictionary,NSArray)转化成NSData数据类型,并且转化时指定固定的长度length。

    所以采用了以下方法👇

    NSData *data2 = [NSData dataWithBytesNoCopy:(nonnull void *)  length:(NSUInteger)]

    如果单个使用该方法没有什么问题,但是项目需要把它放入for循环语句中,结果循环一旦>1,app直接崩溃。

    原因:指针丢失,内存泄漏,Pointer being freed was not allocated

    for循环中dataWithBytesNoCopy,根据传进去的bytes实际上是生产多个NSData对象,然而当一个for循环成功后NSData对象会被release,同时bytes也被顺带release掉了,等到for循环下一轮开始后,NSData的对象再次释放,编译器接着想要释放bytes时,但此时bytes已经被释放掉了,出现了Double Free的错误。

    解决方法:

    1,使用dataWithBytesNoCopy中参数freeWhenDone,当freeWhenDone:NO时的确可以解决Double Free问题。

    2,单单对于这个项目需求,可以转换思路,不使用dataWithBytesNoCopy_length的方法,采用NSMutableData自己手动拼接成固定长度的data。

    参考资料:

    http://www.itstrike.cn/Question/151dd68e-a851-4534-85be-7ab8736b39f8.html

    http://blog.csdn.net/ooaven/article/details/18276119

    个人开发随笔,不喜勿喷,谢谢!

    相关文章

      网友评论

        本文标题:ios-NSData-->dataWithBytesNoC

        本文链接:https://www.haomeiwen.com/subject/zvelhxtx.html