Objective C initWithNibName

时间:2011-06-03 09:44:00

标签: objective-c ios string nib init

我正面临一些困难,弄清楚Apple教程中的这个功能代表什么:

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

我的问题是:“@”在MyViewController之前代表什么?

另外,当我关注this教程时,我想知道:我的项目中有nibs:自动生成的MainWindow.xib和MyViewController.xib - 我想知道:为什么我有两个如果我只需要一个?

提前致谢!

1 个答案:

答案 0 :(得分:2)

字符串文字前面的@ -sign表示该字符串是NSString的一个实例。

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

您甚至可以向其发送消息:

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

您将比C字符串更频繁地使用NSString对象。

如果要将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.

就我个人而言,我更喜欢不使用笔尖,但这是他们自己的选择。