Macintosh lietojumprogrammu izstrādei ir nepieciešama radošums, Objective-C programmēšanas prasmes, zināma pacietība un laba neatlaidība, lai ieviestu, pilnveidotu un nodrošinātu lietotājiem jūsu Macintosh lietojumprogrammu labā darba kārtībā. Ceļā uz šo galamērķi jūs saskarsities ar dažiem izaicinājumiem, kas pārbaudīs jūsu programmēšanas un problēmu risināšanas prasmes. Jums ir jāsaprot (cita starpā) ar delegātu izmantošanu lietojumprogrammu atzvanīšanas ieviešanai; izmantojot Apple ietvarus, kas nav Objective-C; un C++ koda iekļaušanu savās lietotnēs.
Atzvanīšanas ieviešana Macintosh lietojumprogrammās
Macintosh lietojumprogrammu izstrādē tiek izmantoti atzvani, lai Mac OS X varētu izpildīt kodu jūsu lietotnē noteiktām darbībām. Ja veidojat standarta Macintosh logu vai dokumentu lietojumprogrammu, pats pirmais kods, ko OS X izpildīs, ir vienā no tālāk norādītajām atzvanīšanas metodēm, kas ir jāizveido savai lietotnei atkarībā no programmas dizaina.
-
Uz logiem balstītas lietojumprogrammas: (void)applicationDidFinishLaunching:(NSNotification*)aNotification
-
Uz dokumentiem balstītas lietotnes: (void)windowControllerDidLoadNib:(NSWindowController*)windowController
Atzvanīšana ir vienkārši metode, ko OS galu galā izpilda, mēģinot piegādāt vai izgūt informāciju no jūsu lietotnes. Jūsu lietojumprogrammas kods izpildīs metodi Cocoa klasei, kurā jūsu lietotnei būs iespēja norādīt vienas klases metodes nosaukumu, lai tā tiktu izsaukta šīs klases objektā, kas arī jūsu lietotnei būs jānorāda.
Delegāts ir palīgs objekts, kurā kakao klases izmanto, lai paplašinātu funkcionalitāti klasē, ļaujot jums ieviest kodeksu, kurā kakao klase izpildīt noteiktos apstākļos. Cocoa klase pārbauda savu delegāta objektu (ja tāds ir piešķirts), lai noskaidrotu, vai delegāts nodrošina noteiktas metodes ieviešanu. Ja delegātam ir šī metode, Cocoa klase izpilda šo metodi; ja delegāts neievieš šo konkrēto metodi, Cocoa klase vai nu izmanto savu noklusējuma metodi, vai reģistrē kļūdu. Lielākajai daļai delegātu ir jāiekļauj konkrēts protokols, kas nosaka, kādas metodes viņi drīkst ieviest; jūsu koda delegātiem ir jāizmanto ieviešanas metodes no konkrētā protokola, ko delegāts sagaida.
Šeit ir daži no Cocoa objektiem, kas var izmantot delegātus, lai izpildītu jūsu kodu:
-
NSTableView. NSTableView pieņem delegātu, kas pakļaujas NSTableViewDelegate protokolam. Tas ietver 20–30 metodes, kuras jūsu lietotnes deleģētais objekts var ieviest, lai atbalstītu jūsu lietotnes nepieciešamību zināt, ko dara NSTableView. Ir metodes, kas jūsu lietojumprogrammā tiks izsauktas, kad tai ir jāzina darbības un jāreaģē uz tām, piemēram, kad lietotājs tabulā veic atlasi vai maina kolonnas izmērus.
-
NSApplication. Varat piešķirt NSApplicationDelegate, lai tas apstrādātu dažas metodes, kuras saņems NSApplication instance (jūsu lietojumprogramma). Šīs metodes var izsaukt tieši pirms vai tūlīt pēc tam, kad jūsu lietojumprogramma izpilda citu metodi, lai varētu sagatavot jūsu lietotni.
-
NSWindow. Vienam no jūsu lietojumprogrammas logiem piešķirtais NSWindowDelegate dos jūsu lietotnei iespēju reaģēt uz lietotāja lieluma maiņu, pārvietošanu vai citiem loga notikumiem.
-
NSMenu. Jūs ieviešat NSMenuDelegate, lai atbalstītu notikumus, kas notiek, kad lietotājs mijiedarbojas ar jūsu lietojumprogrammas izvēlnēm.
Non-Objective-C ietvari Macintosh lietojumprogrammās
Apple nodrošina daudzas Macintosh lietojumprogrammu izstrādes sistēmas (koda bibliotēkas), kuras jūsu lietotne var izsaukt, lai veiktu tūkstošiem operāciju operētājsistēmā OS X. Daudzas no šīm ietvariem, piemēram, PDF komplekts, sastāv no Objective-C klasēm, no kurām jūsu lietotne var izveidot un izmantot objektus savās lietojumprogrammās. Tomēr daži no šiem ietvariem ir tikai to funkciju bibliotēkas, kuras var izpildīt jūsu lietotne.
Piemēram, CFNetwork ietvars ir funkciju kopums, ko jūsu lietotne var izmantot, lai veiktu precizētus tīkla savienojumus. NSURL klase nodrošina labu pamata tīkla darbību kopumu, kas ir lieliski piemērots datu izgūšanai, izmantojot URL. Ja jūsu lietotnei ir nepieciešama lielāka kontrole pār tās uzsāktajiem tīkla sakariem, jums būs jāizmanto CFNetwork sistēma un tās funkcijas. Varat izmantot šo kodu, lai sagatavotu HTTP pieprasījumu pārsūtīšanai uz noteiktu URL:
CFStringRef httpBody = CFSTR( " );
CFStringRef headerFieldName = CFSTR("Sīkfails"); // pievienot konkrētu sīkfailu HTTP pieprasījumam
CFStringRef headerFieldValue = CFSTR("loginID=mans_lietotāja_vārds; parole=mana_parole;" );
CFStringRef url = CFSTR("www.diabeticpad.com");
CFURLRef urlRef = CFURLCreateWithStrign( kCFAllocatorDefault, url, NULL );
CFStringRef requestMethod = CFSTR( "GET" );
CFHTTPMessageRef pieprasījums = CFHTTPMessageCreateRequest( kCFAllocatorDefault, requestMethod, url, kCFHTTPVersion1_1 );
CFHTTPMessageSetBody(pieprasījums, httpBody);
// pievieno cepumu
CFHTTPMessageSetHeaderFieldValue(pieprasījums, galvenes lauka nosaukums, galvenes laukaVērtība);
CFDataRef serializedHttpRequest = CFHTTPMessageCopySerializedMessage( pieprasījums );
Kad kods ir saņēmis serializētu pieprasījumu, jūsu lietotne var atvērt rakstīšanas straumi, lai nosūtītu pieprasījumu galamērķim.
Visas uz C balstītās Apple sistēmas nodrošina funkciju kopumu šāda veida zemāka līmeņa programmēšanas veikšanai. Jūsu kods kļūs sarežģītāks, taču Apple nenodrošina Objective-C klases visiem saviem ietvariem. Ja jums patiešām ir nepieciešama funkcionalitāte, kas pieejama kādā no šīm sistēmām, tas ir vienīgais veids, kā sasniegt savas lietotnes mērķus. Tālāk norādītie ietvari nenodrošina Objective-C klases:
Ja vēlaties izveidot lietotnes, kas var pilnībā izmantot OS X funkcijas, jums jābūt gatavam atbalstīt koda bibliotēku, kas nav Objective-C, izmantošanu.
C++ kods Objective-C Macintosh lietojumprogrammās
Objective-C nodrošina objektorientētas funkcijas Macintosh lietojumprogrammu izstrādei, piemēram, pārmantošanu un polimorfismu. Valoda ir balstīta uz C programmēšanas valodu; tāpēc varat izmantot savas C programmēšanas zināšanas, lai kodētu Objective-C ietvaros. Objective-C++ ir tilta mehānisms, kas ļauj Objective-C avota moduļiem strādāt ar Objective-C++ klasēm, kuras varētu apkopot un saistīt ar C++ kodu bibliotēkām.
Šis vienkāršais kvadrātveida matricas piemērs parāda C++ galvenes faila saturu Matrix klasei. Matrix klasei ir standarta konstruktors un destruktors C++ klasei, un metodes ir tādas, ko jūs varētu sagaidīt pamata kvadrātveida matricas objektam:
klases Matrica
{
publiski:
Matrica( int inSize );
virtuālā ~Matrix();
int getSize(spēkā);
int getDeterminant(spēkā);
void setElement( int inRow, int inCol, int inValue );
int getElement( int inRow, int inCol );
Matricas operators+( const Matrix& inAddend );
Privāts:
int m_size;
int[][] m_elements;
};
Lai izmantotu Objective-C++, jūsu Objective-C++ klases moduļiem ir jāizmanto faila paplašinājums .mm. Tas norāda Xcode kompilatoram, ka klase ir jākompilē, izmantojot Objective-C++, kas ļaus jūsu klasei izmantot C++ valodas atslēgvārdus. Izmantojot Objective-C++, jūsu lietotne var izveidot Matrix objektu, lai veiktu pamatdarbības, piemēram, pievienotu divus Matrix objektus. Tas pieņem, ka Objective-C++ avota modulis ir #importējis C++ Matrix.h failu:
- (neesošs) pievienojiet divas matricas
{
Matrix matrixOne(3); // 3x3 matrica
Matrix matrixTwo( 3 ); // cits
int rowIndekss = 0;
int colIndekss = 0;
priekš (rowIndex=0; rowIndex<3; ++rowIndex)
{
priekš (colIndex=0; colIndex<3; ++colIndex)
{
// iestatīt matricas elementus uz to vērtībām
matrixOne.setElement( rowIndex, colIndex, XXX );
// iestatiet matricas divi elementi uz dažām citām vērtībām
matrixTwo.setElement( rowIndex, colIndex, YYY );
}
}
Matrix matrixSum = matrixOne + matrixTwo;
Izmantojot Objective-C++, jūsu lietotnes var izmantot visas pieejamās trešo pušu bibliotēkas, kas rakstītas C++.