2011-08-09 15 views
4

なぜUIButtonはallocとinit呼び出しを必要とせず、代わりに UIButton *myBtn = [UIButton buttonWithType:UIButtonTypeCustom];だけを使用します。UIButtonがallocとinitを必要としないのはなぜですか?

  1. 上記の行は自動的にsを割り当て、uibuttonを初期化しますか?
  2. 私はallocとinitを明示的に使用していないので、myBtn?をリリースする必要がありますか?

これは簡単な質問かもしれませんが、私はこれに対する正解を知らないのですが、誰かが助けることができますか?どんな助けもありがとうございます。事前に感謝します。

答えて

2

からread this linkが;)

は基本的に、名前はあなたがrelease(またはautorelease)を呼び出すために必要allocnewcopyまたはmutableCopyで始まります。

オブジェクトを返す他のメソッドは、自動解放されたオブジェクトを返します。例えば

:助け

// You need to release these 
NSString *myString = [[NSString alloc] init]; 
NSString *nextString = [myString copy]; 
UIbutton *button = [[UIButton alloc] initWithType:UIButtonTypeCustom]; 

// You don't need to release these 
NSString *thirdString = [NSString stringWithString:@"Hello"]; 
UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom]; 

願っています!

+0

あなたのアドバイスのために多くのdeanWombourneに感謝して、それは本当に役立った – George

4

まあ、buttonWithTypeはあなたのためにallocinitのタイプのUIButtonを返します。また、自動リリースされます。

allocinit自分でUIButtonを入力すると、タイプUIButtonTypeCustomのUIButtonが表示されます。

+0

それは必ずしもカスタムボタンを意味する必要はありません。しかし、オートリリースの場合+1。 –

2

buttonWithTypeは、解放する必要のない自動解放オブジェクトを返します。 allocのように、releaseの必要はありません。メソッド名が従うルールのセットがあります

1

実装はすべてのUIClassオブジェクトに対して隠されています。クラスレベルのallocメソッドはUIButtonの場合はNSObjectから来ています。私たちが書くとallocメソッドを取得します。しかし、apple Guyはbuttonwithtypeクラスレベルメソッド我々はアロケーションを行う必要はありません、なぜこの

(id)buttonWithType:(UIButtonType)buttonType 
{ 

UIButton=[NSObject alloc]; 

code for button type specification 

return id; 

} 

のthatsのように再び