作为正在阅读Apple的Objective-C 2.0文档的Java开发人员:我想知道" 向nil发送消息 "意味着什么 - 更不用说它实际上有用了什么.摘自文档:
Cocoa中有几种模式可以利用这一事实.从消息返回到nil的值也可能是有效的:
- 如果该方法返回一个对象,任何指针类型,任何大小小于或等于sizeof(void*),float,double,long double或long long的整数标量,则发送给nil的消息返回0 .
- 如果该方法返回一个结构,如Mac OS X ABI函数调用指南所定义的那样在寄存器中返回,那么发送给nil的消息将为数据结构中的每个字段返回0.0.其他结构数据类型不会用零填充.
- 如果该方法返回除上述值类型之外的任何内容,则发送到nil的消息的返回值是未定义的.
Java是否让我的大脑无法解释上面的解释?或者是否有一些我想念的东西会让它像玻璃一样清晰?
我确实在Objective-C中得到了消息/接收器的概念,我只是对接收器碰巧感到困惑nil.
作为新的可可,我遇到的几个问题Interface Builder,UIViewController和朋友.
我有一个在xib中定义的UIViewController子类UIView,并且控制器的视图插座连接到视图.xib的"文件所有者"被设置为myViewcontroller子类.
在这一个实例中,以下用于加载控制器/视图的代码(来自主视图控制器)无法按预期工作:
if ( self.myViewController == nil )
{
self.myViewController = [[MyViewController alloc]
initWithNibName:@"MyViewController" bundle:nil];
}
[self.navigationController
pushViewController:self.myViewController animated:YES];
Run Code Online (Sandbox Code Playgroud)
在MyViewController的方法中,我放置了断点和日志消息以查看发生了什么:
-(id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
NSLog(@"initWithNibName\n");
}
return self;
}
-(void)viewDidLoad {
[super viewDidLoad];
NSLog(@"viewDidLoad\n");
}
Run Code Online (Sandbox Code Playgroud)
预期结果
调用两者-initWithNibName和-viewDidLoad方法,并显示myViewController的视图.
观察结果
仅-initWithNibName调用,不显示视图.
我错过了什么吗?任何人都可以推荐任何检查?(特别是在奇妙的不透明Interface Builder工具中).