我想寫一個代碼來創建NSMutableData從malloced緩衝區。我使用freewhendone = YES
1)它創建NSData後訪問緩衝區時出錯(在下面的代碼中的memset中)
2)mableced緩衝區指針和[數據字節]指針是不同的。NSMutabledata byteswithnocopy問題
這些有什麼解釋嗎?
UWORD8 *rgb_buffer = malloc(u4_stride * u4_height * 3);
NSMutableData *rgbData = [NSMutableData dataWithBytesNoCopy:rgb_buffer
length:(u4_stride * u4_height * 3)
freeWhenDone:YES];
memset(rgb_buffer, 0, (u4_stride * u4_height * 3));
您很可能在ARC中運行,並且在memset之後沒有使用rgbData對象;因此,它可能會提早釋放對象,從而釋放rgb_buffer。請參閱http://blog.bignerdranch.com/296-arc-gotcha-unexpectedly-short-lifetimes/ – iccir