Что делает установщик UIView @synthesize создать - PullRequest
1 голос
/ 23 апреля 2011

Как сделать пользовательский установщик 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 по умолчанию?

Спасибо.

1 Ответ

2 голосов
/ 23 апреля 2011

Только вторая версия (с оператором if) верна. В вашей первой версии представьте, что anObject и myLabel на самом деле указывают на один и тот же объект (то есть указатели совпадают). В этом случае вы освободите объект, что приведет к его освобождению, если никакой другой объект не сохранил его. Последующая попытка сохранить освобожденный объект приведет к сбою.

...