2011-06-03 73 views
1

我面临一些困难搞清楚什么该功能在苹果教程代表:目标C initWithNibName

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

我的问题是:什么是“@” MyViewController前等待?

附加地,因为我遵循this教程,我想知道:在我的项目中有nibs:自动生成的MainWindow.xib和MyViewController.xib - 我想知道:为什么我有两个,如果我只需要一个?

在此先感谢!

回答

2

字符串文字前的@ -sign表示该字符串是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]; 

关于两种笔尖:实际上你根本不需要任何笔尖,但是苹果喜欢使用只有一个窗口的笔尖来降低性能。我不知道他们为什么这样做,但是你可以用代码创建一个只有一行的窗口,编译和运行速度更快。

在你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. 

个人而言,我更喜欢在根本不使用笔尖,但是这是自己的选择。

+0

谢谢!为什么char-array以null结尾?并且:我可以将它转换为NSString对象吗? – arik 2011-06-03 09:48:36

+0

真的吗?我更喜欢在代码中制作窗​​口,但Apple永远不会告诉我如何去做。你可以吗?这对我来说非常重要!谢谢! – arik 2011-06-03 09:49:31

+1

在C中,字符串总是[以空字符结尾](http://en.wikipedia.org/wiki/C_string)。您可以将其转换为NSString对象,但除非使用C库(例如SQLite),否则通常不需要使用C字符串。 – 2011-06-03 09:50:05