2011-06-07 73 views
0
- (void)viewDidLoad { 

    BlueViewController *blueController = [[BlueViewController alloc] [email protected]"BlueView" bundle:nil]; 
    self.blueViewController = blueController; //blueViewController set to var above 

    [self.view insertSubview:blueController.view atIndex:0]; 
    [blueController release]; 
    [super viewDidLoad]; 
} 

没有很好地理解这段代码。为什么我插入子视图blueController而不是self.blueViewController插入子视图 - iPhone

如果我不使用自我也有什么区别。甚至不知道为什么使用自我。我将它解释为我将当前视图控制器的blueViewController属性设置为blueController实例,但我为什么要这样做。我正在阅读的这本书没有详细解释这些事情。这几乎是猴子做的。

回答

0

没有很好地理解这段代码。为什么我正在插入子视图blueController而不是self.blueViewController

既然你已经执行的任务:

self.blueViewController = blueController; 

这两个变量是一样的,所以

[self.view insertSubview:self.blueController.view atIndex:0]; 

会就像你发布的代码一样。

如果我不使用自我也有什么不同。甚至不知道为什么使用自我。我将它解释为我将当前视图控制器的blueViewController属性设置为blueController实例,但我为什么要这样做。我正在阅读的这本书没有详细解释这些事情。这几乎是猴子做的。

如果你没有分配给self.blueController,那么你的变量只是该函数的一个简单变量。通过拥有一个属性self.blueController并在那里存储一个值,你可以在你的类的所有选择器(函数)中使用该值。

检查代码,你会看到self.blueController也用于其他功能。例如,在某些时候,您可能会决定将该子视图隐藏起来,或者想要将其删除,等等。所有这些只有在指向您的类功能的控制器的指针时才可以执行。

0

如果您指的是类的对象,则使用self。

0

初始化变量时,我们必须使用self。这会将blueViewController的retainCount增加为1.

self.blueViewController = blueController;

插入时也可以同时使用两者。结果将是相同的。

[self.view insertSubview:blueController.view atIndex:0];
[self.view insertSubview:self.blueController.view atIndex:0];

0

blueController是一个分配和初始化对象,而blueViewController只是一个指向BlueViewController类的指针。通过编写

self.blueViewController = blueController 

您保留blueController object.If你行尽快释放

[blueController release]; 

程序将会崩溃后,你不使用你自己不会ratining对象,你再次提到它。