2013-08-23 49 views
0

我試圖檢測剪貼板中的對象的大小。我試過了:malloc_size無法確定剪貼板內容大小

UIPasteBoard *pb = [UIPasteboard generalPasteboard]; 
for(NSDictionary *myDictionary in [pb items]){ 
    NSLog(@"%zu", malloc_size((__bridge const void *)(myDictionary))); 
} 

問題是這將返回一個類似的數字,無論是在剪貼板還是電影中有一個單詞(純文本)!

如何找到剪貼板中對象的可靠大小?

+0

這可能會對你有所幫助。 http://stackoverflow.com/a/5207253/1407017 – Amar

+0

@Amar實際上,這是有用的文字和電影的作品,但它返回0爲剪貼板 – Hope4You

+0

'UIImagePNGRepresentation()''可以給你的圖像數據你可以得到字節大小。 – Amar

回答

0

在這種情況下,malloc_size只包含NSDictionary的「結構」,而不是它分配的任何內存並保留指針。簡而言之,malloc_size對於這個目的是非常沒用的。

要獲取剪貼板的對象(S)的尺寸感,你可以試試這個:

UIPasteboard* pb = [UIPasteboard generalPasteboard]; 
NSUInteger totalSize = 0; 
for (NSString* type in pb.pasteboardTypes) 
{ 
    NSData* data = [pb dataForPasteboardType: type]; 
    totalSize += data.length; 
} 
+0

你能幫我理解這將如何使用更少的內存比在http://stackoverflow.com/a/5207253/1407017方法?看來這兩種方法都需要新的分配? – Hope4You

+0

'dataForPasteboardType:'會返回一個'NSData'對象,通常情況下,它已經存在於內存中。詢問其長度不應該導致任何進一步的內存分配。使用NSPropertyListSerialization序列化字典將強制創建NSData以保存字典的序列化版本。 – ipmcc