Это достаточно легко проверить.Начните с короткого примера программы:
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSURL *url = ...
NSDictionary *dict = [NSDictionary dictionaryWithContentsOfURL:url];
NSLog(@"%@", dict);
}
return 0;
}
Это печатает содержимое нашего plist-файла, как и следовало ожидать.Теперь мы ставим точку останова на первой строке и запускаем ее снова.Как только мы получаем приглашение lldb, мы набираем:
(lldb) breakpoint set -r '.*NSPropertyListSerialization.*'
Затем нажимаем «Продолжить», чтобы возобновить выполнение.Конечно же, мы остановимся на точке останова:
(lldb) bt
* thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 2.1
* frame #0: 0x00007fff4f22a018 Foundation`+[NSPropertyListSerialization propertyListWithData:options:format:error:]
frame #1: 0x00007fff4f229bbf Foundation`+[NSDictionary(NSDictionary) newWithContentsOf:immutable:] + 158
frame #2: 0x00007fff4f242fe9 Foundation`+[NSDictionary(NSDictionary) dictionaryWithContentsOfURL:] + 45
frame #3: 0x0000000100000e7d MyGreatProject`main(argc=1, argv=0x00007ffeefbff6a0) at main.m:15
frame #4: 0x00007fff75461015 libdyld.dylib`start + 1
Итак, из этого мы можем определить, что +dictionaryWithContentsOfURL:
просто вызывает NSPropertyListSerialization
, чтобы выполнить свою грязную работу.Поэтому на практике разумно сделать вывод, что не имеет значения, какой вы используете, хотя NSPropertyListSerialization
обеспечивает большую гибкость благодаря параметру options
и отчетам об ошибках.