UIViewController
いくつかのポイントを達成するために、のサブクラスとしてクラスクラスターを作成しようとしています:
1.実際の iOS バージョンによる ViewController の動作の違い
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:
ます。その後、そのように作成されたビュー コントローラがUINavigationController
のナビゲーション スタックにプッシュされます。
これは、大きな欠点が 1 つありますが、ほぼ意図したとおりに機能します。ARC はMyViewController_xxx
、ナビゲーション スタックからポップされたインスタンスの割り当てを解除しません。iOSのバージョンは問いません。
私は何が欠けていますか?
更新: -initWithStuff:
-(id)initWithStuff:(StuffClass*)stuff
{
if (self = [super init])
{
self.stuff = stuff;
}
return self;
}
このメソッドは にも実装されていMyViewController
ます。違いは後で発生します (例: viewDidLoad:
)。