今天晚上被dataWithBytes引起内存泄漏的问题弄得一个头两个大,回来后又想了一下,问题似乎不出在dataWithBytes本身。
大致情况是这样:
在while里面处理接收到的视频数据,将Binary Data存到bytes buffer中去,再通过dataWithBytes生成一个NSData对象,最后再转成UIImage呈现出来。
最初是用:
+ (id)dataWithBytes:(const void *)bytes length:(NSUInteger)length
然后知道有:
+ (id)dataWithBytesNoCopy:(void *)bytes length:(NSUInteger)length
但发现在我结束while后出现:
"Pointer being freed was not allocated"
晚上回来,再次Google & DDG,想到几点:
- while中使用dataWithBytes,会生成很多NSData对象,并且每个对象都拥有一份length长度的bytes buffer,我以为有ARC,它会被Auto Release掉,我一定是哪里弄错了!
- 在while中用dataWithBytesNoCopy时,传递进去的bytes虽然内容在变,但自身从未被free或delete,根据Sta