首先,您的代码是正确的,但它可以更简单。
如果你做了以下合成,
@synthesize practicalVC; // synthesize release the existing reference if has
以下代码与您的代码相同。
self.practicalVC = [[[PracticalSignsMainViewController alloc] init] autorelease];
如您所述,如果您的应用不需要多次访问视图控制器,则无需单独拥有视图控制器的实例。
==============修改====================
在看到@6NSString @Abizern 的答案后,我修改了我的答案。
关于自动发布和编码风格。
1.自动释放,
@6NSString 说“它使用自动释放,除非返回新分配的对象,否则许多人会避免这种情况。”
但即使你在 return 语句中使用“autorelease”,返回对象的保留计数也不会立即减少。会在适当的时候减少。
所以如果我们想显式地立即减少retaincount,我们应该使用成对的“release”。
-(NSObject*)testAuto {
return [[[NSObject alloc] init] autorelease];
}
...
self.anObj = [self testAuto];
// the retainCount of anObj is 2
..
-(void)testAuto {
self.anObj = [[[NSObject alloc] init] autorelease];
}
...
[self testAuto];
// the retainCount of anObj is also 2
..
-(void)testAuto {
self.anObj = [[[NSObject alloc] init] autorelease];
[self.anObj release]; // Yes, yes, you may say this code does not look good. :)
}
...
[self testAuto]
// the retainCount of anObj is 1
...
如您所见,(我自然地再次测试了上面的代码)return 语句和 alloc 语句中的“autorelease”几乎相同。如果你想更难地管理保留计数,我们应该使用“释放”。
我认为 alloc 语句中的“autorelease”比 return 语句中的要好,因为 return 中的“autorelease”可以省略。 :)
2。编码风格,
作为“1.autorelease”的结尾,我认为alloc语句中的autorelease会更安全,以避免丢失释放。