Objective-C saa objektin syntaksinsa Smalltalkista. Kaikki syntaksi ei-olio-operaatiot (mukaan lukien primitiivinen muuttujia, pre-processing, ilmaisuja, toiminto ilmoitukset, ja funktiokutsut) ovat samat kuin C, kun taas syntaksin olio-ominaisuudet, on täytäntöönpano Smalltalk-tyyliin messaging.
MessagesEdit
objective-C-malli olio-ohjelmointi perustuu viesti kulkee objektin esiintymiä. Tavoite-C: ssä ei kutsuta menetelmäksi,vaan viestiksi., Tämä poikkeaa C++: n käyttämästä Simula-tyylisestä ohjelmointimallista. Näiden kahden käsitteen ero on siinä, miten menetelmällä tai viestin nimellä viitattu koodi toteutetaan. Vuonna Simula-tyyli kieli, menetelmän nimi on useimmiten sidottu osa-koodi kohde-luokan kääntäjä. Vuonna Smalltalk ja objective-C -, tavoite viesti on ratkaistu suorituksen, jossa vastaanottava objekti itse viestin tulkitseminen., Menetelmä on tunnistaa valitsin tai SEL — ainutlaatuinen tunniste kunkin viestin nimi, usein vain NUL-lopetetaan merkkijono, joka edustaa sen nimi — ja päätti C menetelmä osoitin sen toteuttamisesta: IMP. Seurauksena tästä on, että viestiliikennejärjestelmässä ei ole tyyppitarkastusta. Kohde, jolle viesti on suunnattu — vastaanotin — ei välttämättä vastaa viestiin, ja jos se ei, se nostaa poikkeuksen.,
Lähettää viestin menetelmä objektin huomautti, jonka osoitin tavoite vaatisi seuraava koodi C++:
obj->method(argument);
objective-C, tämä on kirjoitettu seuraavasti:
;
”metodi” puhelu on käännetty compiler on objc_msgSend(id itsensä, SEL op, …) runtime-toimintojen perhe. Erilaiset toteutukset käsittelevät moderneja lisäyksiä kuten Superia. GNU perheitä, tämä toiminto on nimeltään objc_msg_sendv, mutta se on hylätty hyväksi moderni haku järjestelmän objc_msg_lookup.,
molemmilla ohjelmointityyleillä on vahvuutensa ja heikkoutensa. Olio-ohjelmointi Simula (C++) tyyli mahdollistaa useiden perintö-ja nopeampi toteutus käyttämällä compile-time sitova aina kun se on mahdollista, mutta se ei tue dynaaminen sidonta oletuksena. Se pakottaa myös kaikki menetelmät vastaavaan toteutukseen, elleivät ne ole abstrakteja. Myös Smalltalk-tyyliin ohjelmointia käytetään objective-C: n avulla viestit mennä toteuttamaton, kanssa menetelmä ratkaista sen toteuttamiseen suorituksen., Esimerkiksi esinekokoelmaan voidaan lähettää viesti, johon vain joidenkin odotetaan reagoivan ilman pelkoa ajonaikaisten virheiden tuottamisesta. Viestin välittäminen ei myöskään edellytä kohteen määrittämistä kääntövaiheessa. Menetelmän kutsuminen johdettuun objektiin edellyttää vielä toteutusta. (Katso alla olevasta dynaamisesta kirjoituksesta lisää dynaamisen (myöhäisen) sidonnan etuja.)
Liitännät ja implementationsEdit
objective-C vaatii, että käyttöliittymä ja täytäntöönpano luokan olla erikseen ilmoitettu koodi lohkoja., Conventionin mukaan kehittäjät asettavat rajapinnan otsikkotiedostoon ja toteutuksen kooditiedostoon. Otsikkotiedostot, jotka yleensä on kiinnitetty .h, ovat samanlaisia C otsikkotiedostot kun täytäntöönpano (menetelmä) tiedostot, yleensä kiinni .m, voi olla hyvin samanlainen C – kooditiedostoja.
InterfaceEdit
Tämä on analoginen luokan ilmoitukset käyttää muissa olio-kielet, kuten C++ tai Python.
luokan rajapinta määritellään yleensä otsikkotiedostossa. Yleinen konventio on nimetä otsikkotiedosto luokan nimen, esimerkiksi pallon, mukaan.,h sisältäisi luokkakuulan rajapinnan.
liitäntä julistus on muodoltaan:
edellä, plus-merkit tarkoittavat luokan menetelmiä tai menetelmiä, joita voidaan kutsua luokan sisällä (ei esimerkiksi), ja miinus-merkit tarkoittavat esimerkiksi menetelmiä, joita voidaan kutsua vain tietyn esiintymä luokan. Luokkamenetelmillä ei myöskään ole pääsyä instanssimuuttujiin.,
yllä Oleva koodi vastaa karkeasti seuraavia C++ käyttöliittymä:
Huomaa, että instanceMethod2With2Parameters:param2_callName: osoittaa lomituksen valitsin segmenttien argumentti ilmaisuja, joille ei ole suoraa vastinetta C/C++.
Paluu tyypit voi olla mikä tahansa C-tyypin standardi, osoitin generic objective-C-objektin osoittimen tietyn objektin tyypin, kuten NSArray *, NSImage *, tai NSString *, tai osoitin luokka, johon menetelmä kuuluu (instancetype). Oletuspalautustyyppi on yleinen Objective-C-tyypin tunnus.,
Menetelmä argumentteja alkaa nimi merkintöjä väite siitä, että on osa menetelmän nimi, jota seuraa kaksoispiste, jota seuraa odotettua argumentin tyyppiä suluissa ja väite nimi. Etiketin voi jättää pois.
rajapinnan määritelmän derivaatta on luokka, jonka avulla voidaan lisätä menetelmiä olemassa oleviin luokkiin.
ImplementationEdit
käyttöliittymä vain vakuuttaa, luokka, interface ja menetelmät itse: varsinainen koodi on kirjoitettu täytäntöönpano-tiedoston avaamiseen., Toteutuksesta (menetelmä) – tiedostot yleensä on tiedostotunniste .m
, joka alun perin merkitsi ”viestit”.
@implementation classname+ (return_type)classMethod { // implementation}- (return_type)instanceMethod { // implementation}@end
Menetelmät ovat kirjoitettu käyttäen niiden käyttöliittymä ilmoitukset.Vertaamalla objective-C ja C:
- (int)method:(int)i { return ;}
int function(int i) { return square_root(i);}
syntaksin avulla pseudo-nimeäminen argumentteja.
menetelmän sisäiset representaatiot vaihtelevat tavoitteen C eri toteutusten välillä., Jos myColor on luokan Väri, esimerkiksi menetelmä -changeColorToRed:vihreä:sininen: saattaa olla sisäisesti merkitty _i_Color_changeColorToRed_green_blue. I on viitata esimerkiksi menetelmä, luokan kanssa ja sitten menetelmä nimet liitteenä ja kaksoispisteet muuttunut alaviivoja. Kuten järjestyksessä parametrit on osa menetelmän nimi, se ei voi muuttaa sopivaksi koodaus tyyli tai ilmaisun todellinen nimeltä parametrit.
funktion sisäisiä nimiä käytetään kuitenkin harvoin suoraan. Yleensä viestit muunnetaan Objective-C runtime-kirjastossa määritellyiksi funktiopuheluiksi., Se ei ole välttämättä tiedossa linkki aika, joka menetelmä on nimeltään, koska luokan vastaanotin (kohde lähetetään viesti), ei tarvitse olla tiedossa, kunnes runtime.
InstantiationEdit
Kun objective-C-luokka on kirjoitettu, se voidaan instantiated. Tämä tapahtuu kohdistamalla ensin luokan (objektin) sijoittamaton instanssi ja sitten alustamalla se. Objekti ei ole täysin toimiva ennen kuin molemmat vaiheet on suoritettu., Näitä toimenpiteitä pitäisi toteuttaa yksi rivi koodia niin, että ei koskaan varattu esine, jota ei ole tehty alustus (ja koska se on viisasta pitää välituloksen jälkeen -init
voi palata eri esine kuin että mikä se on nimeltään).,
Instanssien kanssa, default, o-parametri alustaja:
MyObject *foo = init];
Instanssien kanssa mukautetun alustaja:
MyObject *foo = initWithString:myString];
tapauksessa, jossa ei ole custom alustus on suoritettu, ”uusi” menetelmä voidaan usein käyttää paikka alloc-init-viestit:
MyObject *foo = ;
Myös jotkut luokat toteuttaa luokan menetelmä initializers., Kuten +new
he yhdistää +alloc
ja -init
, mutta toisin kuin +new
he palauttaa autoreleased esimerkiksi. Jotkut luokan menetelmä initializers ottaa parametrit:
MyObject *foo = ;MyObject *bar = ;
alloc viesti allokoi tarpeeksi muistia pitää kaikki instanssimuuttujat objektin, asettaa kaikki instanssimuuttujat nolla-arvot, ja kääntyy muistin osaksi luokan ilmentymä; missään vaiheessa alustus on muisti esimerkiksi yliluokka.,
init-viesti suorittaa instanssin luomisen yhteydessä. Init-menetelmä on usein kirjoitettu seuraavasti:
- (id)init { self = ; if (self) { // perform initialization of object here } return self;}
edellä olevassa esimerkissä huomaa id
paluuarvon tyyppi. Tämä tyyppi tarkoittaa” osoitinta mihin tahansa objektiin ” Tavoite-C: ssä (katso dynaaminen kirjoitusosa).
alustajan kuvio on tapana vakuuttaa, että esine on oikein alustettu sen yliluokka ennen init-metodi suorittaa sen alustuksen., Se suorittaa seuraavat toiminnot:
- itse = Lähettää yliluokka esimerkiksi init viestin ja määrittää tuloksen itse (osoitin nykyinen objekti).
- Jos (itse)tarkistaa, onko palautettu objektin osoitin voimassa ennen alustuksen suorittamista.
- return selfrets the value of self to the caller.
ei-voimassa oleva esine osoitin on arvo nil; ehdollisia lausuntoja, kuten ”jos” hoitoon nolla, kuten null-osoitin, niin alustus koodia ei suoriteta, jos ne palautetaan nil., Jos alustuksessa on virhe, init-menetelmän tulisi suorittaa kaikki tarpeelliset puhdistukset, mukaan lukien ”release” – viestin lähettäminen itselle, ja palauttaa nolla osoittamaan, että alustus epäonnistui. Kaikki tällaisten virheiden tarkistaminen on tehtävä vasta sen jälkeen, kun olet kutsunut superclass-alustuksen sen varmistamiseksi, että kohteen tuhoaminen tapahtuu oikein.
Jos luokassa on enemmän kuin yksi alustuksen menetelmä, vain yksi heistä (”nimetty alustajan”) tarvitsee noudattaa tätä kaavaa; muiden pitäisi soittaa nimetylle alustajan sijaan yliluokka alustajan.,
ProtocolsEdit
muissa ohjelmointikielissä näitä kutsutaan ”rajapinnoiksi”.
objective-C jatkettiin Ensi esitellä käsite useita perintö erittely, mutta ei täytäntöönpanoa ottamalla käyttöön protokollia. Tämä on malli, saavutettavissa joko abstraktina useita perinnöllinen pohja-luokka C++, tai ”interface” (kuten Java ja C#). Objective-C käyttää ad hoc-protokollia kutsutaan epäviralliset pöytäkirjat ja kääntäjä-täytäntöön pöytäkirjat nimeltään muodollisia pöytäkirjoja.,
epävirallinen pöytäkirja on luettelo menetelmistä, jotka luokka voi halutessaan toteuttaa. Se on määritelty dokumentaatiossa, koska sillä ei ole läsnäoloa kielellä. Epäviralliset pöytäkirjat ovat toteutettu luokka (ks. alla) NSObject ja sisältävät usein valinnaisia menetelmiä, jotka, jos ne toteutetaan, voi muuttaa käyttäytymistä luokassa. Esimerkiksi tekstikenttäluokassa voi olla delegaatti, joka toteuttaa epävirallisen protokollan, jossa on valinnainen menetelmä suorittaa automaattisesti kirjoitettu teksti., Teksti-kentässä huomaa, onko siirtää toteuttaa kyseisen menetelmän kautta (reflektointi) ja, jos niin, puhelut siirretään, on menetelmä tukee automaattinen täydennys ominaisuus.
muodollinen protokolla muistuttaa rajapintaa Javassa, C#: ssä ja Ada 2005: ssä. Se on luettelo menetelmistä, joita mikä tahansa luokka voi ilmoittaa toteuttavansa. Versiot objective-C, ennen kuin 2.0 vaaditaan, että luokka toteuttaa kaikki menetelmät pöytäkirjassa, se julistaa itsensä hyväksyminen; kääntäjä tuottaa virheen, jos luokka ei toteuta jokainen menetelmä sen julisti pöytäkirjat. Tavoite-C 2.,0 lisätty tuki tiettyjen menetelmien merkitsemiselle pöytäkirjassa valinnainen, eikä kääntäjä valvo vapaaehtoisten menetelmien täytäntöönpanoa.
luokka on julistettava kyseisen pöytäkirjan täytäntöön panemiseksi sen mukaiseksi. Tämä on havaittavissa juoksuaikaan. Muodolliset protokollat eivät voi tarjota mitään toteutuksia; ne vain vakuuttavat soittajille, että protokollan mukaiset luokat tarjoavat toteutuksia. Seuraavan/Apple kirjasto, protokollia käytetään usein Jaettu Esineitä järjestelmä edustaa kykyjä objektin suorittamista kauko-järjestelmä.,
syntax:
@protocol NSLocking- (void)lock;- (void)unlock;@end
tarkoittaa, että siellä on abstrakti ajatus lukitus. Toteamalla, luokan määritelmä on, että protokolla on toteutettu,
@interface NSLock : NSObject <NSLocking>// ...@end
tapauksissa NSLock väittävät, että he antavat täytäntöönpanoa varten kahden oikeusasteen menetelmiä.
Dynaaminen typingEdit
objective-C, kuten Smalltalk, voit käyttää dynaaminen tyypitys: esine voidaan lähettää viesti, joka ei ole määritelty sen käyttöliittymä., Tämä voi mahdollistaa lisääntyi joustavuutta, koska se mahdollistaa objektin ”kaapata” viestin ja lähettää viestin toiseen objektiin, joka voi vastata viestiin asianmukaisesti, tai myös lähettää viestin toiselle objekti. Tämä käyttäytyminen tunnetaan viestinsiirtona tai delegaationa (KS.alla). Vaihtoehtoisesti voidaan käyttää virheenkäsittelijää, jos viestiä ei voida lähettää eteenpäin. Jos objekti ei lähetä viestiä, vastaa siihen tai käsittele virhettä, järjestelmä luo ajonaikaisen poikkeuksen., Jos viestit lähetetään nollille (null object pointer), ne jätetään hiljaa huomiotta tai nostetaan yleinen poikkeus, riippuen kääntäjän vaihtoehdoista.
Staattinen tyypitystieto voidaan myös valinnaisesti lisätä muuttujiin. Tämän jälkeen tiedot tarkistetaan kokoamisajankohtana. Seuraavissa neljässä lausumassa annetaan yhä tarkempia tyyppitietoja. Lausunnot ovat vastaavan suorituksen, mutta ylimääräinen tietojen avulla kääntäjä varoittaa ohjelmoija, jos kulunut argumentti ei vastaa määrittelemä.,
- (void)setMyValue:(id)foo;
edellä julkilausuman, foo voi olla minkä tahansa luokan.
- (void)setMyValue:(id<NSCopying>)foo;
edellä julkilausuman, foo voi olla esimerkiksi jokin luokka, joka vastaa NSCopying
pöytäkirjan.
- (void)setMyValue:(NSNumber *)foo;
edellä julkilausuman, foo on esimerkiksi NSNumber luokan.
- (void)setMyValue:(NSNumber<NSCopying> *)foo;
edellä julkilausuman, foo on esimerkiksi NSNumber luokan, ja sen on oltava NSCopying
pöytäkirjan.,
Tavoite-C: ssä kaikki objektit esitetään osoittimina, eikä staattinen alustaminen ole sallittua. Yksinkertaisin objekti on tyyppi, johon id (objc_obj *) viittaa, jolla on vain luokkaansa kuvaava isa-osoitin. Muut C-tyypit, kuten arvot ja struktit, ovat muuttumattomia, koska ne eivät kuulu objektijärjestelmään. Päätös eroaa C++ – objektimallista, jossa struktsit ja luokat ovat yhtenäisiä.
ForwardingEdit
Objective-C mahdollistaa viestin lähettämisen kohteeseen, joka ei välttämättä vastaa., Pikemminkin kuin vastaa tai yksinkertaisesti pudottamalla viesti, kohde voi lähettää viestin esine, joka voi vastata. Huolinta voidaan yksinkertaistaa täytäntöönpanoa tiettyjä suunnittelumalleja, kuten observer kuvio tai proxy-malli.
objective-C runtime määrittää, pari menetelmiä Esine
objekti, joka haluaa toteuttaa huolinta tarvitsee vain ohittaa huolinta-menetelmä uusi menetelmä määrittää huolinta käyttäytymistä. Toiminta menetelmä performv:: ei tarvitse ohittaa, koska tämä menetelmä vain suorittaa toiminta perustuu valitsin ja argumentteja., Huomaa SEL
tyyppi, joka on tyyppi viestejä objective-C.
Huomautus: OpenStep, Kaakao, ja GNUstep, yleisesti käytetty kehyksiä Tavoite-C, yksi ei käytä Object-luokan. The – (void)forwardInvocation:(NSInvocation *)anInvocation menetelmä NSObject-luokassa on tapana tehdä huolinta.
ExampleEdit
Tässä on esimerkki ohjelma, joka osoittaa perusasiat huolinta.
huolitsija.H huolitsija.M vastaanottaja.s
#import <objc/Object.h>// A simple Recipient object.@interface Recipient : Object- (id)hello;@end
Vastaanottaja.m
#import "Recipient.h"@implementation Recipient- (id)hello { printf("Recipient says hello!\n"); return self;}@end
main.,m
NotesEdit
Kun laadittu käyttäen gcc-kääntäjä kertoo:
kääntäjä on raportointi vaiheessa tehty aiemmin, että Huolitsija ei vastaa hello-viestejä. Tässä tilanteessa on turvallista jättää varoitus huomiotta, koska huolinta on toteutettu. Käynnissä ohjelma tuottaa tämä lähtö:
$ ./a.outRecipient says hello!
CategoriesEdit
suunnittelun Aikana objective-C, yksi suurimmista huolenaiheista oli huollettavuus ja suuri koodi emäkset., Strukturoidusta ohjelmamaailmasta saadut kokemukset olivat osoittaneet, että yksi tärkeimmistä tavoista parantaa koodia oli hajottaa se pienempiin osiin. Objective-C lainasi ja laajensi Smalltalk-toteutusten kategorioiden käsitettä auttaakseen tässä prosessissa.
lisäksi luokkaan kuuluvat menetelmät lisätään ajonaikaiseen luokkaan. Näin ollen Kategoriat sallivat ohjelmoijan lisätä menetelmiä olemassa olevaan luokkaan-avoimeen luokkaan-ilman tarvetta palauttaa kyseinen luokka tai edes käyttää sen lähdekoodia., Jos järjestelmä ei esimerkiksi sisällä merkkijonon toteutuksessa oikolukua, se voidaan lisätä muokkaamatta merkkijonon lähdekoodia.
kategorioiden sisäiset menetelmät eivät erotu luokan menetelmistä, kun ohjelmaa ajetaan. Luokalla on täysi pääsy kaikkiin luokan instanssimuuttujiin, myös yksityisiin muuttujiin.
Jos luokka vakuuttaa, menetelmä, jossa sama menetelmä allekirjoitus kuin olemassa menetelmä, luokan, luokan menetelmä on hyväksytty. Näin luokat eivät voi vain lisätä menetelmiä luokkaan, vaan myös korvata olemassa olevia menetelmiä., Tätä ominaisuutta voidaan käyttää korjaamaan vikoja muissa luokissa uudelleenkirjoittamalla niiden menetelmät tai aiheuttamalla maailmanlaajuinen muutos luokan käyttäytymiseen ohjelman sisällä. Jos kahdessa kategoriassa on menetelmiä, joilla on sama nimi mutta eri menetelmäsertifikaatit, on määrittelemätön, minkä kategorian menetelmä on hyväksytty.
Muut kielet ovat yrittäneet lisätä tätä ominaisuutta monin tavoin. TOM otti Tavoite-C-järjestelmän askeleen pidemmälle ja salli myös muuttujien lisäämisen. Muissa kielissä on sen sijaan käytetty prototyyppipohjaisia ratkaisuja, joista merkittävin on Self.
the C# ja Visual Basic.,NET kieliä toteuttaa pinnallisesti samanlaisia toimintoja muodossa laajennus menetelmiä, mutta näitä ei ole saatavilla, yksityisiä muuttujia luokan. Ruby ja useat muut dynaamiset ohjelmointikielet kutsuvat tekniikkaa nimellä ”monkey patching”.
Logtalk toteuttaa käsite luokkiin (kuten ensimmäisen luokan entiteettejä), jotka kuu-luu objective-C-luokkien toiminnallisuuden (Logtalk luokkia voidaan myös käyttää hienorakeinen yksiköt koostumus, kun määritellään esim. uusia luokkia tai prototyyppejä; erityisesti Logtalk luokka voidaan käytännössä tuoda tahansa määrä luokkia ja prototyypit).,
Esimerkki käyttö categoriesEdit
Tämä esimerkki kerääntyy Kokonaisluku luokan määrittelemällä ensin basic-luokan kanssa vain accessor menetelmiä toteutetaan, ja lisäämällä kahteen ryhmään, Aritmeettinen ja Näyttö, joka laajentaa perus luokka. Kun luokat voivat käyttää perustaa luokan yksityiset tiedot, jäsenet, se on usein hyvä käytäntö käyttää näitä yksityisiä tietoja jäsenten kautta accessor menetelmiä, joka auttaa pitämään luokkia enemmän riippumaton perustaa luokan. Tällaisten käyttöoikeuksien käyttöönotto on yksi tyypillinen luokkien käyttö. Toinen on käyttää luokkia lisäämään menetelmiä perusluokkaan., Huonona käytäntönä ei kuitenkaan pidetä luokkien käyttämistä alaluokkiin, joka tunnetaan myös nimellä apinan paikkaus. Epäviralliset protokollat toteutetaan NSObject-perusluokan kategoriana. Yleissopimuksen mukaan tiedostot, jotka sisältävät luokkia, jotka laajentavat perusluokkia, ottavat nimen BaseClass+ExtensionClass.h.
kokonaisluku.s
#import <objc/Object.h>@interface Integer : Object { int integer;}- (int)integer;- (id)integer:(int)_integer;@end
Kokonaisluku.M kokonaisluku+aritmeettinen.s
#import "Integer.h"@interface Integer (Arithmetic)- (id) add: (Integer *) addend;- (id) sub: (Integer *) subtrahend;@end
Kokonaisluku+Aritmeettinen.M kokonaisluku+näyttö.s
#import "Integer.h"@interface Integer (Display)- (id) showstars;- (id) showint;@end
Kokonaisluku+ – Näyttö.m main.,m
NotesEdit
Kooste on tehty, esimerkiksi:
gcc -x objective-c main.m Integer.m Integer+Arithmetic.m Integer+Display.m -lobjc
Yksi voi kokeilla jättämällä pois #tuonti ”Kokonaisluku+Aritmeettinen.h ” ja linjat ja jättämällä kokonaisluku+aritmeettinen.m kokoelmassa. Ohjelma jatkuu edelleen. Tämä tarkoittaa, että on mahdollista sekoittaa-ja-match lisätty luokkia tarvittaessa; jos luokka ei tarvitse olla joitakin kykyjä, sitä ei yksinkertaisesti voida koota.
PosingEdit
objective-C-luvat a-luokan kokonaan korvata toisen luokan ohjelman sisällä. Korvaavan luokan sanotaan ”poseeraavan” kohdeluokkana.,
Class posing julistettiin huonoksi Mac OS X v10.5: llä, eikä sitä ole saatavilla 64-bittisessä runtimessa. Samanlainen toiminnallisuus voidaan saavuttaa käyttämällä menetelmää swizzling luokissa, että swaps yhden menetelmän täytäntöönpanoa toisen, joilla on sama allekirjoitus.
– Sillä versiot vielä tukeminen poseeraa, kaikki viestit lähetetään kohde luokka on sen sijaan saanut poseeraa luokan. Rajoituksia on useita:
- a-luokka voi esiintyä vain yhtenä sen suorista tai epäsuorista superluokista.,
- poseeraa luokka on ei määritä uusi esiintymä-muuttujia, jotka ovat poissa kohde-luokka (vaikka se voi määritellä tai korvaavat menetelmät).
- kohdeluokka ei välttämättä ole saanut viestejä ennen poseerausta.
poseeraaminen, samoin kategorioiden kanssa, mahdollistaa olemassa olevien luokkien maailmanlaajuisen vahvistamisen. Poseeraa sallii kaksi ominaisuudet poissa luokkiin:
- poseeraa luokka voi soittaa ohittaa menetelmien kautta super, mikä sisältää täytäntöönpanon kohteen luokan.
- poseerausluokka voi ohittaa kategorioissa määritellyt menetelmät.,
esimerkiksi
Tämä sieppaa jokaisen vetoaminen setMainMenu että NSApplication.
#importEdit
C-kielellä, #include
pre-koota direktiivin aiheuttaa aina tiedoston sisältö työnnetään lähde siinä vaiheessa. Objective-C on #import
direktiivi, joka vastaa paitsi, että jokainen tiedosto on mukana vain kerran per compilation unit, ilman tarvetta sisällyttää vartijat.