1

カスタム UIView セッターの作成方法。例えば:

1) プロパティを作成します。

@property (retain) IBOutlet UILabel *myLabel

2) セッターを作成します (@synthesize が作成するのと同じ):

- (void)setMyLabel:(UILabel *)anObject
{
     [myLabel release];
     myLabel = [anObject retain]; 
}

それは正しいですか、それとも新しいビューが現在のものと同じでないかどうかを確認する必要があります

- (void)setMyLabel:(UILabel *)anObject
{
    if(anObject != myView){
        [myLabel release];
        myLabel = [anObject retain]; 
    }
}

myView と anObject だけがオブジェクト ポインターです。では、-isEqual メソッドでそれらをチェックする必要がありますか? それとも、まったくチェックする必要はありませんか?@synthesize はデフォルトでどのようなコードを生成しますか?

ありがとう。

4

1 に答える 1

2

2 番目のバージョン (ifステートメントを含む) のみが正しいです。anObject最初のバージョンでは、実際に同じオブジェクトを指していると想像してくださいmyLabel(つまり、ポインターは同じです)。その場合、オブジェクトを解放すると、他のオブジェクトがそれを保持していない場合、そのオブジェクトの割り当てが解除されます。その後、割り当て解除されたオブジェクトを保持しようとすると、クラッシュが発生します。

于 2011-04-22T21:44:13.823 に答える