2013-08-23 2 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

@ Амар действительно полезен и работает для текста и фильма, однако он возвращает 0 для изображения в буфере обмена – Hope4You

+0

'UIImagePNGRepresentation()' может предоставить вам данные изображения, из которых вы можете получить размер байта. – Amar

ответ

0

В этом случае malloc_size включает в себя «структуру» NSDictionary, не любую память, на которую он выделяет и сохраняет указатели. Короче говоря, malloc_size довольно бесполезен для этой цели.

Чтобы получить представление о размере объекта (ов) на монтажном столе, вы можете попробовать это:

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

Смежные вопросы