Chcę zwolnić kod, gdy właściwość jest dostępna i zmieniona. Używam @property
i @synthesize
w moim kodzie dla moich ivars. Właściwości są zachowane, więc chciałbym zachować te funkcje zarządzania pamięcią automatycznie generowane przez @synthesize
.Jak zapewnić dodatkowe niestandardowe wdrożenie metod dostępu podczas używania @synthesize?
Jednak zakładam, że @synthesize
mówi kompilatorowi, aby wygenerował kod metod dostępu bezpośrednio pod adresem @synthesize is
, więc większość przypadków znajduje się na górze kodu, prawda?
A kiedy mam właściwość foo
, otrzymuję metody -setFoo
i -foo
. Czy mogę po prostu zrobić taką metodę, aby wykonać jakiś niestandardowy kod po zmianie właściwości?
-(void)setFoo {
// custom stuff
}
Teraz to jest problem. Jak wykonać pierwszy? Nie chciałbym mieć tutaj innego imienia. Czy istnieje sposób na to, aby dyrektywa @synthesize
utworzyła inne nazwy dla metod getter i setter, które następnie łatwo wywołuję? I nadal będę mógł używać składni dot, aby uzyskać do nich dostęp?
FYI, Twój program ustawiający przykład ma błąd, ponieważ dwukrotne wywoływanie tego samego obiektu może spowodować zwolnienie tego obiektu przed jego zachowaniem. Nie jest to naprawdę wielka sprawa, ale pokazuje, jak trudne może być uzyskanie tych rzeczy dokładnie. –
Nie jestem pewien, czy podążam, czy mógłbyś wyjaśnić, jak to powinno być napisane (nie jest tak, że nie wierzę ci, chciałbym wiedzieć, jak to zrobić właściwie). Dzięki :) – jbrennan
Och, nvm Widzę problem, zaktualizuję go, aby odzwierciedlić zmiany. – jbrennan