我正在尝试创建一个类集群作为子类UIViewController
来完成一些要点:
1. ViewController 的不同行为取决于实际 iOS 版本
2. iOS 版本检查不会弄乱代码
3.来电者无需关心
到目前为止,我得到了课程MyViewController
,MyViewController_iOS7
并且MyViewController_Legacy
。
为了创建实例,我调用了myViewControllerWithStuff:(StuffClass*)stuff
如下实现的方法:
+(id)myViewControllerWithStuff:(StuffClass*)stuff
{
if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1)
{
return [[MyViewController_iOS7 alloc] initWithStuff:stuff];
}
else
{
return [[MyViewController_Legacy alloc] initWithStuff:stuff];
}
}
调用者使用myViewControllerWithStuff:
. 之后,如此创建的视图控制器被推送到 aUINavigationController
的导航堆栈上。
这几乎可以按预期工作,但有一个很大的缺点:ARC 不会释放MyViewController_xxx
从导航堆栈中弹出的实例。哪个iOS版本无关紧要。
我错过了什么?
更新: -initWithStuff:
-(id)initWithStuff:(StuffClass*)stuff
{
if (self = [super init])
{
self.stuff = stuff;
}
return self;
}
此方法也在MyViewController
. 差异稍后会出现(例如viewDidLoad:
)。