0

パフォーマンスの観点からどちらが優れているかについては疑問があります。

タイプaViewControllerの変数があり、bViewControllerのオブジェクトが含まれています。したがって、bViewControllerでメソッドを呼び出す必要があるたびに、(bViewController *)aViewController.MethodNameのように呼び出します。

bViewControllerをそれ自体の型の変数に格納し、それを型キャストで使用する方がよいかどうかを考えています。

型キャストに関連するオーバーヘッドは何ですか?

4

1 に答える 1

0

標準の命名規則に従っていないように見えるため、コメントに混乱が見られます。これはあなたがしていることについての私の推測です:

あなたはあなたが持っていると言います:

UIViewController *aViewController;

何も問題はありません。変数名は小文字で始まります。次に、あなたはそう言う:

aViewController = [[bViewController alloc] init];

bViewControllerこれはおそらくクラスであるため、慣例により大文字で始める必要があります。また、このクラスがどのように定義されているかについても言いませんが、おそらくそれはサブクラスです(大文字と小文字を修正します)。

@interface BViewController : UIViewController

上記の割り当ての後、で定義されたメソッドを呼び出したいBViewControllerので、次のように記述します。

((BViewController *)aViewController).propertyDefinedInBViewController

最初にメソッドを呼び出すことは、(通常は)ドット構文では実行されません。つまり、プロパティ用です。次に、追加の括弧が必要です。そうでない場合は、プロパティ呼び出しの結果をキャストし、ではありませんaViewController

それはあなたがしていることに合っていますか?

もしそうなら、あなたの質問に-型キャストの費用はいくらですか?

あるポインタ型から別の型への型キャストには費用はかかりませんが、値型(整数、実数など)間の型キャストには、実行時の変換が含まれ、コストがかかる場合があります。あなたのケースは前者なので、実行時のコストはゼロです。ただし、多くの参照を行う場合は、正しいタイプの中間変数を使用して1回だけキャストすることをお勧めします。これにより、読みやすさ(開発時間のコスト)が向上する傾向があります。また、実際にクラスのインスタンスがあることを確認しない限り、サブクラスにキャストしないでください。例:

if ([aViewController isKindOfClass:[BViewController class]])
{
   BViewController *myBViewController = (BViewController *)aViewController;
   ...
}

または、サブクラスのインスタンスがあり、それが明白であるかコメントされていることをコードで保証します。

HTHと私はあなたがしていることを完全に間違って推測していません!

于 2012-10-26T04:42:59.317 に答える