Macintosh forritaþróun krefst sköpunargáfu, Objective-C forritunarkunnáttu, smá þolinmæði og góðrar þrautseigju til að innleiða, betrumbæta og skila Macintosh forritinu þínu í góðu ástandi til notenda þinna. Á leiðinni til þessa áfangastaðar muntu lenda í nokkrum áskorunum sem reyna á forritunar- og vandamálahæfileika þína. Þú verður að ná tökum á (meðal annars) að nota fulltrúa til að innleiða afturhringingar forrita; nota non-Objective-C ramma frá Apple; og fella C++ kóða inn í forritin þín.
Innleiðing svarhringinga í Macintosh forritum
Macintosh forritaþróun notar svarhringingar til að leyfa Mac OS X að keyra kóða í forritinu þínu fyrir sérstakar aðgerðir. Ef þú ert að búa til staðlað Macintosh glugga- eða skjalatengt forrit, þá er fyrsti kóðinn sem OS X mun keyra með einni af eftirfarandi svarhringingaraðferðum sem þú þarft að búa til fyrir appið þitt, allt eftir hönnun forritsins:
Svarhringing er einfaldlega aðferð sem stýrikerfið framkvæmir að lokum á meðan það er að reyna að veita eða sækja upplýsingar úr forritinu þínu. Forritskóðinn þinn mun framkvæma aðferð fyrir Cocoa bekk þar sem appið þitt mun hafa tækifæri til að gefa upp heiti aðferðar eins af bekknum þínum, til að kalla á hlut úr þeim flokki sem appið þitt verður einnig að veita.
A fulltrúi er hjálpar hlut, sem Cocoa flokkur notar til að lengja virkni bekknum með því að leyfa þér að framkvæma kóðann sem Cocoa tegund mun framkvæma ákveðnar aðstæður. Kakóflokkur athugar fulltrúahlut sinn (ef honum hefur verið úthlutað) hvort fulltrúinn veitir útfærslu á tiltekinni aðferð. Ef fulltrúinn hefur þá aðferð, keyrir Cocoa bekkurinn þá aðferð; ef fulltrúinn útfærir ekki þessa tilteknu aðferð notar Cocoa bekkurinn annað hvort sjálfgefna aðferð eða skráir villu. Flestir fulltrúar verða að fella tiltekna siðareglur sem ákvarðar hvaða aðferðir þeir mega innleiða; Fulltrúar kóðans þíns verða að nota innleiðingaraðferðirnar úr tilteknu samskiptareglunum sem fulltrúinn býst við.
Hér eru nokkrir af Cocoa hlutunum sem geta notað fulltrúa til að keyra kóðann þinn:
-
NSTableView. NSTableView tekur við fulltrúa sem hlýðir NSTableViewDelegate siðareglum. Þetta felur í sér 20 til 30 aðferðir sem fulltrúahlutur appsins þíns getur innleitt til að styðja við þörf forritsins þíns til að vita hvað NSTableView er að gera. Það eru aðferðir sem verða kallaðar í forritið þitt þegar það þarf að vita og bregðast við aðgerðum, svo sem þegar notandi velur í töflunni eða þegar dálkur er breytt.
-
NSA umsókn. Þú getur úthlutað NSApplicationDelegate til að sinna einhverjum af þeim aðferðum sem NSapplication tilvik (umsóknin þín) mun fá. Hægt er að kalla á þessar aðferðir rétt fyrir eða rétt eftir að forritið þitt keyrir aðra aðferð, svo hægt sé að undirbúa forritið þitt.
-
NSWindow. NSWindowDelegate sem er úthlutað á einn af gluggum forritsins þíns mun gefa appinu þínu tækifæri til að bregðast við notanda sem breytir stærð, flutningi eða öðrum gluggaatburðum.
-
NSMenu. Þú innleiðir NSMenuDelegate til að styðja við atburði sem gerast þegar notandi hefur samskipti við valmyndir í forritinu þínu.
Non-Objective-C Frameworks í Macintosh forritum
Apple útvegar mörg Macintosh forritaþróunarramma (kóðasöfn) sem appið þitt getur kallað til til að framkvæma þúsundir aðgerða í OS X. Margir þessara ramma, eins og PDF Kit, eru samsettir úr Objective-C flokkum, sem appið þitt getur úr búa til og nota hluti í forritunum þínum. Hins vegar eru sum þessara ramma bara söfn með aðgerðum sem appið þitt getur framkvæmt.
Til dæmis er CFNetwork ramma safn aðgerða sem appið þitt getur notað til að framkvæma fínstilltar nettengingar. NSURL flokkurinn býður upp á gott sett af grunnnetaðgerðum sem eru frábærar til að sækja gögn með vefslóð. Ef forritið þitt krefst meiri stjórn á netsamskiptum sem það kemur af stað, verður þú að nota CFNetwork ramma og aðgerðir þess. Þú gætir notað eftirfarandi kóða til að undirbúa HTTP beiðni fyrir sendingu á tiltekna vefslóð:
CFStringRef httpBody = CFSTR( " );
CFStringRef headerFieldName = CFSTR( "Kex" ); // bættu tilteknu vafraköku við HTTP beiðni
CFStringRef headerFieldValue = CFSTR( "loginID=my_user_name; password=my_password;");
CFStringRef url = CFSTR( "www.diabeticpad.com" );
CFURLRef urlRef = CFURLCreateWithStrign( kCFAllocatorDefault, url, NULL );
CFStringRef requestMethod = CFSTR( "GET" );
CFHTTPMessageRef request = CFHTTPMessageCreateRequest( kCFAllocatorDefault, requestMethod, url, kCFHTTPVersion1_1 );
CFHTTPMessageSetBody( beiðni, httpBody );
// bætið við kexinu
CFHTTPMessageSetHeaderFieldValue( beiðni, headerFieldName, headerFieldValue );
CFDataRef serializedHttpRequest = CFHTTPMessageCopySerializedMessage( request );
Þegar kóðinn þinn hefur raðbeiðnina getur appið þitt opnað skrifstraum til að koma beiðninni á áfangastað.
Allar C-undirstaða Apple ramma bjóða upp á mengi aðgerða til að framkvæma þessa tegund af forritun á lægra stigi. Kóðinn þinn verður flóknari, en Apple býður ekki upp á Objective-C flokka fyrir alla ramma þess. Ef þú virkilega þarfnast þeirrar virkni sem til er í einum af þessum ramma, þá er þetta eina leiðin til að ná markmiðum appsins þíns. Eftirfarandi rammar bjóða ekki upp á Objective-C flokka:
Ef þú vilt búa til öpp sem geta nýtt sér eiginleika OS X til fulls þarftu að vera tilbúinn til að styðja notkun á non-Objective-C kóðasöfnum.
C++ kóða í Objective-C Macintosh forritum
Objective-C býður upp á hlutbundna eiginleika fyrir þróun Macintosh forrita, svo sem erfðir og fjölbreytni. Tungumálið byggir á C forritunarmálinu; þess vegna geturðu notað C forritunarþekkingu þína til að kóða innan Objective-C. Objective-C++ er brúarbúnaður sem gerir Objective-C frumeiningum kleift að vinna með Objective-C++ flokkum, sem gætu safnað saman og tengt við C++ kóðasöfn.
Eftirfarandi einfalda dæmi um ferningsfylki sýnir innihald C++ hausskrár fyrir Matrix flokk. Matrix flokkurinn kemur með venjulegum smiði og destructor fyrir C++ flokk, og aðferðirnar eru það sem þú gætir búist við fyrir grunn ferningsfylkishlut:
flokki Matrix
{
opinbert:
Matrix( int inSize );
sýndar ~Matrix();
int getSize( ógilt );
int getDeterminant(void);
void setElement( int inRow, int inCol, int inValue );
int getElement( int inRow, int inCol );
Matrix operator+( const Matrix& inAdddend );
einkamál:
int m_stærð;
int[][] m_elements;
};
Til að nota Objective-C++ verða Objective-C++ flokkaeiningarnar þínar að nota skráarendingu .mm. Þetta segir þýðanda Xcode að bekkinn eigi að vera settur saman með Objective-C++, sem gerir bekknum þínum kleift að nota C++ tungumálalykilorð. Með því að nota Objective-C++ gæti appið þitt búið til Matrix hlut til að framkvæma grunnaðgerðir, eins og að bæta tveimur Matrix hlutum saman. Þetta gerir ráð fyrir að Objective-C++ frumeiningin hafi #innflutt C++ Matrix.h skrána:
- (void)addTwoMatrices
{
Matrix matrixOne( 3 ); // 3x3 fylki
Matrix matrixTwo( 3 ); // annað
int rowIndex = 0;
int colIndex = 0;
fyrir (rowIndex=0; rowIndex<3; ++rowIndex)
{
fyrir (colIndex=0; colIndex<3; ++colIndex)
{
// stilltu matrix manns þætti á gildi þeirra
matrixOne.setElement( rowIndex, colIndex, XXX );
// stilltu þætti fylkis tvö á önnur gildi
matrixTwo.setElement( rowIndex, colIndex, YYY );
}
}
Matrix matrixSum = fylkiEinn + fylkiTveir;
Með Objective-C++ geta forritin þín nýtt sér öll tiltæk þriðja aðila bókasöfn sem eru skrifuð fyrir C++.