Doel van instantie-methoden versus klassenmethoden in doelstelling C

Ik heb al deze vragen bekeken ...

... en alles wat ze uitleggen, is hoe instellingsmethoden worden gebruikt op instanties van een klasse en class-methoden worden gebruikt met de klas, wanneer een bericht naar een klas wordt verzonden. Dit is handig, maar ik ben nieuwsgierig om te weten waarom iemand een klassemethode versus een instantiemethode zou gebruiken.

15
toegevoegd de auteur Wayne Hartman, de bron

1 antwoord

Over het algemeen moet u exemplaarmethoden maken wanneer u code nodig hebt die op een specifiek exemplaar van een object werkt. U maakt een klassemethode wanneer u iets moet doen dat die klasse in het algemeen omvat, maar waarschijnlijk niet werkt aan specifieke objecten van die klasse.

In de praktijk zult u merken dat bijna al uw methoden instantiemethoden moeten zijn . Kijk maar eens naar een bestaandeobjective-cklasse zoals NSString , NSArray , UIView , etc. en je zult zien dat de grote meerderheid van hun methoden zijn voorbeeldmethoden. Het meest gebruikelijke gebruik van klassemethoden (nogmaals, kijk naar de klassen die ik heb genoemd) is voor gemakconstructeurs die autorelease -objecten of singleton-accessors retourneren.

Overweeg de methode length in NSString . Waarom is dit een instantiemethode en geen klassenmethode? Het is een instantiemethode omdat het alleen zinvol is om een ​​specifiek exemplaar van NSString te vragen wat de lengte ervan is. Het vragen van NSString in het algemeen voor een lengte (d.w.z. als lengte een klassemethode was) zou niet logisch zijn.

Aan de andere kant, laten we zeggen dat we een methode willen toevoegen aan NSNumber die de maximale integerwaarde zal teruggeven die op een bepaald systeem kan worden opgeslagen. In dit geval moet het een -klassenmethode zijn, omdat we alleen een algemene vraag stellen over NSNumber die onafhankelijk is van een specifiek exemplaar.

45
toegevoegd
Heel leuke uitleg ... bedankt :)
toegevoegd de auteur Nav, de bron
Goede uitleg. Maar ik vraag me af of het nu nog steeds uitmaakt, want toen ik dit bericht schreef, was ARC al in beeld.
toegevoegd de auteur sooon, de bron
Uitstekende uitleg.
toegevoegd de auteur Aldee, de bron
U bent in de war tussen de methodeparameters en het object dat wordt gebruikt om de methode aan te roepen (a.k.a. de ontvanger). Ik zou willen voorstellen om een ​​aantal grondige Objective-C-zelfstudies online of in een boek te bekijken.
toegevoegd de auteur UIAdam, de bron
Nice Explanation. Je hebt echt de belangrijkste reden!
toegevoegd de auteur Azure Yu, de bron