2015-01-26 34 views
0

我對iOS編程非常陌生。我有一個函數簽名dataWithBytes,dataWithBytes和initWithBytes有什麼區別?

(NSData*) Decrypt; 

而在功能我必須從字符*緩衝區建立的NSData *和我嘗試這三個功能。

NSData *returnData = [[NSData alloc] initWithBytes:buffer length:buflength]; 
NSData *returnData = [NSData dataWithBytes:buffer length:buflength]; 
NSData *returnData = [NSData dataWithBytesNoCopy:buffer length:buflength]; 

return returnData; 

此外,此代碼也工作。除了

NSData *returnData = [NSData dataWithBytesNoCopy:buffer length:buflength]; 

return [NSData dataWithBytesNoCopy:buffer length:buflength] 

一切運行正常。 是什麼原因?他們之間有什麼區別,哪一個更好用?

回答

2

[[NSData alloc] initWithBytes:buffer length:buflength][NSData dataWithBytes:buffer length:buflength] 是一樣的,第二個只是第一個的簡寫。這些方法創建一個數據對象,其中包含從buffer字節複製的buflength字節。

[NSData dataWithBytesNoCopy:buffer length:buflength]創建一個數據對象,該數據對象包含buffer字節中的buflength個字節。返回的對象獲取buffer指針的所有權,並在解除分配時釋放它。因此,buffer必須指向分配有malloc的內存塊。