ios5基础教程第六章例证疑问

ios5基础教程第六章例子疑问
大神们好:
在《ios5基础教程》这本书中,第六章是讲多视图的,其中的例子,有点不明白:
其中的根视图控制器类BIDSwitchViewController中定义了两个属性,
@property (strong, nonatomic) BIDYellowViewController *yellowViewController;
@property (strong, nonatomic) BIDBlueViewController *blueViewController;
BIDYellowViewController和BIDBlueViewController都继承于UIViewController,在BIDSwitchViewController的
- (IBAction)switchViews:(id)sender函数里,有这样一行代码,if (self.yellowViewController.view.superview == nil),第一次进入这个函数,
yellowViewController指针还没有分配空间初始化,即还是个野指针,这样的话,直接访问其view属性不会有问题,不知道大家明白我的意思没?
谢谢。

------解决方案--------------------
你可以打印下条件中的这个对象,返回的应该是(null) 
这里判断条件在给这个对象发送getter方法,由于对象并没有初始化,所以他的getter方法返回的也都是nil。
------解决方案--------------------
引用:
那既然是nil,那这样写self.yellowViewController.view应该有问题才对啊


而在oc中,nil就相当于c、c++中的NULL指针,一般释放对象后将对象置为nil非常重要,这样可以防止引用非法指针导致程序崩溃掉。

[obj release];//此时obj的引用计数为0
[obj someMethod];//程序崩溃

[obj release];
obj = nil;
[obj someMethod];//obj此时为nil,但不会崩溃

在objective-c中我们只用nil来检查程序的逻辑,而不用于判断对象是否为空来避免崩溃。这与c++是不同。objective-c在运行时会自动处理向nil对象发送消息(调用方法),不会报错崩溃掉。
------解决方案--------------------
引用:
那么比如
@property (strong, nonatomic) BIDYellowViewController *yellowViewController;
@property (strong, nonatomic) BIDBlueViewController *blueViewController;
这样声明两个属性,并且yellowViewController指针没有分配内存的时候,即没有指向某个对象的时候,
yellowViewController.view.superview ,即访问其中的成员变量会是个什么样的情况呢。


这是由于ios的编译器在处理已定义未使用的变量的时候会根据其类型设置一个默认值。如值类型,默认值为0 引用类型默认值为nil.你可以写代码测试一下。定义一个NSInteger的变量,然后再访问它,并打印它的值。你会发现打印出来的值为0,同样的对于指向对象的指针,打印出来的值为null. 这就是你在访问yellowViewController.view.superview 时未报错的原因。记住这句话,“向nil发送消息,不会导致程序异常”
 

------解决方案--------------------
引用:
那么比如
@property (strong, nonatomic) BIDYellowViewController *yellowViewController;
@property (strong, nonatomic) BIDBlueViewController *blueViewController;
这样声明两个属性,并且yellowViewController指针没有分配内存的时候,即没有指向某个对象的时候,
yellowViewController.view.superview ,即访问其中的成员变量会是个什么样的情况呢。


是可以调用其成员变量。但是返回值是NULL。