Развој Мацинтосх апликација захтева креативност, Објецтиве-Ц вештине програмирања, мало стрпљења и лепу помоћ упорности за имплементацију, усавршавање и испоруку ваше Мацинтосх апликације у добром радном стању вашим корисницима. На путу до ове дестинације наићи ћете на изазове који ће тестирати ваше вештине програмирања и решавања проблема. Морате се ухватити у коштац (између осталог) са коришћењем делегата за имплементацију повратних позива апликације; коришћење не-Објецтиве-Ц оквира из Аппле-а; и уграђивање Ц++ кода у ваше апликације.
Имплементација повратних позива у Мацинтосх апликацијама
Развој Мацинтосх апликација користи повратне позиве како би омогућио Мац ОС Кс-у да изврши код унутар ваше апликације за одређене операције. Ако креирате стандардну Мацинтосх апликацију засновану на прозору или документу, први код који ће ОС Кс извршити је у једној од следећих метода повратног позива које морате да креирате за своју апликацију, у зависности од дизајна апликације:
-
Апликације засноване на прозорима: (воид)апплицатионДидФинисхЛаунцхинг:(НСНотифицатион*)аНотифицатион
-
Апликације засноване на документима: (воид)виндовЦонтроллерДидЛоадНиб:(НСВиндовЦонтроллер*)виндовЦонтроллер
Повратни позив је једноставно метод који ОС на крају извршава док покушава да достави или преузме информације из ваше апликације. Ваш код апликације ће извршити методу за класу Цоцоа где ће ваша апликација имати прилику да обезбеди име методе једне од ваших класа, која ће бити позвана на објекту те класе коју ће ваша апликација такође морати да обезбеди.
Делегат је објекат помоћник, коме је какао класа користи да прошире функционалност класе омогућавајући да спроведе код који ће какао класа изврши у одређеним околностима. Класа Цоцоа проверава свој објекат делегата (ако је додељен) да ли делегат обезбеђује имплементацију одређене методе. Ако делегат има тај метод, класа Цоцоа извршава тај метод; ако делегат не имплементира ту специфичну методу, класа Цоцоа или користи сопствену подразумевану методу или евидентира грешку. Већина делегата мора да угради одређени протокол који одређује које методе могу да имплементирају; делегати вашег кода морају да користе методе имплементације из специфичног протокола који делегат очекује.
Ево неких објеката Цоцоа који могу да користе делегате за извршавање вашег кода:
-
НСТаблеВиев. НСТаблеВиев прихвата делегата који поштује НСТаблеВиевДелегате протокол. Ово укључује 20 до 30 метода које делегатски објекат ваше апликације може да примени да подржи потребу ваше апликације да зна шта ради НСТаблеВиев. Постоје методе које ће бити позване у вашој апликацији када треба да зна и реагује на акцију, као што је када корисник направи избор у табели или када се промени величина колоне.
-
НСАпплицатион. Можете доделити НСАпплицатионДелегате да управља неким методама које ће инстанца НСАпплицатион (ваша апликација) примити. Ове методе се могу позвати непосредно пре или непосредно након што ваша апликација изврши други метод, тако да ваша апликација може бити припремљена.
-
НСВиндов. НСВиндовДелегате додељен једном од прозора ваше апликације даће вашој апликацији прилику да одговори на корисникову промену величине, померање или друге догађаје прозора.
-
НСМену. Ви имплементирате НМенуДелегате да бисте подржали догађаје који се дешавају када корисник ступи у интеракцију са менијима у вашој апликацији.
Нон-Објецтиве-Ц оквири у Мацинтосх апликацијама
Аппле обезбеђује многе Мацинтосх оквире за развој апликација (библиотеке кодова) које ваша апликација може позвати да изврши хиљаде операција у ОС Кс. Многи од ових оквира, као што је ПДФ Кит, се састоје од Објецтиве-Ц класа, из којих ваша апликација може креирајте и користите објекте у оквиру својих апликација. Међутим, неки од ових оквира су само библиотеке функција које ваша апликација може да изврши.
На пример, оквир ЦФНетворк је скуп функција које ваша апликација може да користи за обављање фино подешених мрежних веза. Класа НСУРЛ пружа добар скуп основних мрежних операција које су одличне за преузимање података помоћу УРЛ-а. Ако ваша апликација захтева већу контролу над мрежним комуникацијама које покреће, мораћете да користите оквир ЦФНетворк и његове функције. Можете користити следећи код да припремите ХТТП захтев за пренос на одређени УРЛ:
ЦФСтрингРеф хттпБоди = ЦФСТР( " );
ЦФСтрингРеф хеадерФиелдНаме = ЦФСТР( "Цоокие" ); // додај одређени колачић у ХТТП захтев
ЦФСтрингРеф хеадерФиелдВалуе = ЦФСТР( "логинИД=ми_усер_наме; пассворд=ми_пассворд;");
ЦФСтрингРеф урл = ЦФСТР( "ввв.диабетицпад.цом");
ЦФУРЛРеф урлРеф = ЦФУРЛЦреатеВитхСтригн( кЦФАллоцаторДефаулт, урл, НУЛЛ);
ЦФСтрингРеф рекуестМетход = ЦФСТР( "ГЕТ");
ЦФХТТПМессагеРеф рекуест = ЦФХТТПМессагеЦреатеРекуест( кЦФАллоцаторДефаулт, рекуестМетход, урл, кЦФХТТПВерсион1_1);
ЦФХТТПМессагеСетБоди( захтев, хттпБоди);
// додај колачић
ЦФХТТПМессагеСетХеадерФиелдВалуе(захтев, хеадерФиелдНаме, хеадерФиелдВалуе);
ЦФДатаРеф сериализедХттпРекуест = ЦФХТТПМессагеЦопиСериализедМессаге(захтев);
Када ваш код има серијализован захтев, ваша апликација може да отвори ток за уписивање како би испоручила захтев на његово одредиште.
Сви Аппле оквири засновани на Ц-у пружају скуп функција за извођење ове врсте програмирања нижег нивоа. Ваш код ће постати компликованији, али Аппле не обезбеђује Објецтиве-Ц класе за све своје оквире. Ако вам је заиста потребна функционалност доступна у једном од тих оквира, то је једини начин на који можете постићи циљеве своје апликације. Следећи оквири не пружају Објецтиве-Ц класе:
Ако желите да креирате апликације које могу у потпуности да искористе карактеристике ОС Кс, морате бити спремни да подржите употребу библиотека кодова који нису Објецтиве-Ц.
Ц++ код у Објецтиве-Ц Мацинтосх апликацијама
Објецтиве-Ц пружа објектно оријентисане карактеристике за развој Мацинтосх апликација, као што су наслеђивање и полиморфизам. Језик је заснован на програмском језику Ц; стога, можете користити своје знање програмирања у Ц-у за кодирање унутар Објецтиве-Ц-а. Објецтиве-Ц++ је механизам за премошћивање који омогућава Објецтиве-Ц изворним модулима да раде са Објецтиве-Ц++ класама, које могу компајлирати и повезати се са библиотекама Ц++ кодова.
Следећи једноставан пример квадратне матрице показује садржај датотеке заглавља Ц++ за класу Матрик. Класа Матрик долази са стандардним конструктором и деструктором за Ц++ класу, а методе су оно што бисте очекивали за основни квадратни матрични објекат:
цласс Матрик
{
јавно:
Матрик(инт инСизе);
виртуал ~Матрик();
инт гетСизе( воид);
инт гетДетерминант( воид);
воид сетЕлемент( инт инРов, инт инЦол, инт инВалуе);
инт гетЕлемент( инт инРов, инт инЦол);
Матрични оператор+( цонст Матрик& инАдденд);
приватно:
инт м_сизе;
инт[][] м_елементи;
};
Да бисте користили Објецтиве-Ц++, ваши модули класе Објецтиве-Ц++ морају користити екстензију датотеке .мм. Ово говори Ксцоде-овом компајлеру да ће класа бити преведена помоћу Објецтиве-Ц++, што ће омогућити вашој класи да користи кључне речи Ц++ језика. Користећи Објецтиве-Ц++, ваша апликација може да креира Матрик објекат за обављање основних операција, као што је додавање два Матрик објекта заједно. Ово претпоставља да је изворни модул Објецтиве-Ц++ #увезао датотеку Ц++ Матрик.х:
- (воид)аддТвоМатрицес
{
Матрик матрикОне( 3 ); // 3к3 матрица
Матрик матрикТво( 3 ); // други
инт ровИндек = 0;
инт цолИндек = 0;
за (ровИндек=0; ровИндек<3; ++ровИндек)
{
за (цолИндек=0; цолИндек<3; ++цолИндек)
{
// поставља своје елементе матрице на њихове вредности
матрикОне.сетЕлемент( ровИндек, цолИндек, КСКСКС);
// поставља елементе матрице два на неке друге вредности
матрикТво.сетЕлемент( ровИндек, цолИндек, ИИИ);
}
}
Матрик матрикСум = матрикОне + матрикТво;
Са Објецтиве-Ц++, ваше апликације могу да искористе предности свих доступних библиотека независних произвођача написаних за Ц++.