...Vad menar han med "Given that you label the method..." hur då?...
Som framgår av artikeln joakimk länkade till så går det inte att kodmässigt styra vilken init-metod som är "Designated". Så vad han menar är att du helt enkelt lägger till em kommentar före metoden som talar om att detta .
// This is the designated init-method
-(Square *)initWithSide:(int)side {
...
Hur gör man detta? Tycker det verkar krångligt som satan... speciellt då om man inte har
något speciellt man vill ändra på, så måste man ändå anropa den init... som tar flest argument?
Egentligen är det inte så krångligt men exemplet han använder kanske inte är det bästa. Tanken är helt enkelt att du ska ha en init-metod i din klass som ser till att alla attribut får ett värde, antingen via parametrar eller som default värden.
Detta gör det enklare för dig som programmera när du sedan ska använda klassen i din övriga kod för du vet att ingen variabel är oinitierad.
Sedan kan du skapa andra init-metoder som tar färre eller andra argument men om dessa metoder alla anropar den designerade (eller vad det heter på svenska, tillägnade?) så är du garanterad att attributen blir satta.
För att fortsätta på emeplet med Square så skulle du kunna ha en init metod som heter initEmtpySquare för att skapa en tom kvadrat:
-(Square *)initEmptySquare {
return [self initWithSide:0];
]
Det här blir enklare att förstå nyttan med när du jobbar med lite mer komplicerade klasser och framförallt har attribut som är klassr. Men som en aptitretare kan jag säga att det förenklar mycket om man har ett attribut av typ NSMutableArray (eller likande) och vet att denna array alltid är initierad så man inte måste kolla det i koden varje gång man vill lägga till ett nytt element i array:en.
Joakim