Цель C initWithNibName - PullRequest
       22

Цель C initWithNibName

1 голос
/ 03 июня 2011

Я сталкиваюсь с некоторыми трудностями, выясняя, что означает эта функция в руководствах Apple:

[[MyViewController alloc] initWithNibName:@"MyViewController" bundle:[NSBundle mainBundle]]

Мои вопросы: что означает "@" перед MyViewController?

Кроме того, поскольку я следую этому учебнику, мне было интересно: в моем проекте есть перья: автоматически сгенерированные MainWindow.xib и MyViewController.xib - мне было интересно: почему у меня два если мне нужен только один?

Заранее спасибо!

1 Ответ

2 голосов
/ 03 июня 2011

Знак @ перед строковым литералом означает, что строка является экземпляром NSString.

@"Hello" <-- NSString object
"Hello"  <-- Null-terminated char array (C-string)

Вы даже можете отправлять ему сообщения:

[@"Hello" stringByAppendingString:@" World!"]

Вы будете использоватьNSString объекты чаще, чем C-строки.

Если вы хотите преобразовать C-строку в объект NSString (если вы используете библиотеки C, которые, например, возвращают такие строки), вы можете использовать это:

char *myCstring = "Hello, World!";
NSString *myString = [NSString stringWithUTF8String:myCstring];

О двух перьях: на самом деле вам вообще не нужны перья, но Apple нравится снижать производительность, используя перо, которое имеет только одно окно.Я не знаю, почему они это делают, но вы можете создать окно в коде с одной строкой, которая компилируется и работает намного быстрее.

В вашем методе applicationDidFinishLaunching::

self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
self.window.rootViewController = [[[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil] autorelease];
// now you can remove the MainWindow.xib nib.

Лично я предпочитаю вообще не использовать перья, но это свой выбор.

...