iPhone ကိုဖွံ့ဖြိုးရေးကောင်စီသည် Objective-C နှင့်အတူသို့အနည်းငယ်ကွေ့ကွိုးစားအားထု

နိဒါန်း

Objective-C ခေတ်မီ object-oriented programming ကို enable ဖို့ဒီဇိုင်းတစ်ခုပရိုဂရမ်းမင်း language တစ်ခုဖြစ်ပါတယ်; ကကို C programming language ကိုတစ် superset ထက်ပိုပြီးအချည်းနှီးဖြစ်၏ကကို C ၌ရေးထားလျက်ရှိ၏သီအိုရီအ program တစ်ခုမဆိုပြောင်းလဲမှုမရှိဘဲတစ်ဦး Objective-C program ကိုအဖြစ် compile သင့်ကြောင်းကိုဆိုလိုသည်သောကို C ဘာသာစကား, အပေါငျးတို့သညျအခွခေံ syntax ထောက်ခံပါတယ်။

ဖွံ့ဖြိုးတိုးတက်ရေးတို့အတွက်ထောက်ပံ့သောအများစုက object-oriented ပတ်ဝန်းကျင်မှာထိုသူအချို့တို့သည်ဖြစ်ကြအများအပြားအစိတ်အပိုင်းများပါဝင်သည်ဟု:

object-oriented programming ဖြစ်သောတစ်ဦးကဘာသာစကား

အရာဝတ္ထု၏တစ်ဦးကစာကြည့်တိုက်

Development Tools တွေကိုတစ်ဦးကအထုပ်

တစ်ဦးက runtime environment ကို

သငျသညျအဘယျသို့လိုအပ်လိမ့်မည်နည်း

ပထမဦးဆုံးအသငျသညျက iPhone app ကိုဖွံ့ဖြိုးတိုးတက်မှုအတွက်အသုံးပြုတဲ့ programming language ကိုလေ့လာသင်ယူနေသောကြောင့်ငါသည်ဤသင်ခန်းစာမှတဆင့် iPhone ကို applications များတည်ဆောက်ခြင်းအာရုံစိုက်မည်မဟုတ်။ ဒီသင်ခန်းစာဟာဘာသာစကား (Objective-C) အခြေခံသဘောတရားများကိုပိုမိုအာရုံစူးစိုက်မည်ဖြစ်ပြီးဘို့သင်ရုံကို GNU Compiler Collection ကို (GCC) ကဲ့သို့သော compiler နဲ့ Mac အတွက်လိုအပ်ပါတယ်။

သငျသညျကို Apple & # 39 ကနေကောင်းတဲ့အချက်တွေရှိပါတယ်အထုပ်များနှင့် Interface Builder ပြီးသား installed ကြလျှင်, ကိုယ့်ဆိုက်ကိုထို့နောက် GCC ကိုအလိုအလျောက်တပ်ဆင်ပေးခဲ့သည်။ မရလျှင်, သင်တို့အားရှေ့ဦးစွာအနေနဲ့ Apple က Developer တွေ Connection ကိုအကောငျ့အတှကျမှတျပုံတငျဖို့လိုအပ်ပါလိမ့်မယ်။ သငျသညျမှတ်ပုံတင်ခဲ့ကြပြီးတာနဲ့သင်လိုအပ်သော software ကို download လုပ်နိုင်ပြီးတော့ဒေါင်းလုပ် login နဲ့ကိုကလစ်နှိပ်ပါ။

(ဒီသင်ခန်းစာက iPhone developer များရည်ရွယ်တိကျမ်းစာ၌လာသည်ကားဘာဖြစ်လို့လဲဆိုတော့တရားမဝင်ဖြစ်သော) ကို Windows အသုံးပြုသူများသည်ကိုလည်းသင်၏အ Cygwin ကို အသုံးပြု. system ကိုပါသို့မဟုတ် MinGW compiler အပေါ် Objective-C compile နိုင်ပါတယ်။

ဒီနေရာတွင်ဥပမာကြွယ်ဝခြင်းနှင့်မရောက်မီ Objective-C ကိုသုံးဖူးဘူးသောသူတို့အဖို့လက်လှမ်းလိုက်ရန်လွယ်ကူကြောင်းတစ်စတိုင်သုံးပြီး Objective-C အတွက်အစီအစဉ်ကိုရန်လိုအပ်သောကျွမ်းကျင်မှုလေ့လာသွားမှာဖြစ်ပါတယ်။

ဤတွင်ကျနော်တို့ Objective-C နဲ့အရာဝတ္ထု oriented programming များ၏အခြေခံဖုံးလွှမ်းကြ၏။ ဒါကြောင့်, ထိုအဘို့အကြကုန်အံ့ & # 39; s ကိုလျင်မြန်စွာ Objective-C ၏ကြိုတင်သတ်မှတ်ထားဖို့ဒေတာအမျိုးအစားများနှင့်လုပ်ငန်းရှင်များကိုကြည့်။

Objective-C ကထောက်ခံဒေတာအမျိုးအစားများနှင့်ခြေစစ်ပွဲများစာရင်း

int ဒေတာအမျိုးအစား

char ဒေတာအမျိုးအစား

float ဒေတာအမျိုးအစား

နှစ်ဆဒေတာအမျိုးအစား

အိုင်ဒီဒေတာအမျိုးအစား

BOOL ဒေတာအမျိုးအစား

အထူးဇာတ်ကောင် / Escape ပှေါလွင်

တစ် – အသံသတိပေးချက်

ခ – နောက်ပြန်

f – Form ကိုအစာကျွေးခြင်း

n – နယူးလိုင်း

r – Carriage ပြန်လာ

t – Horizontal tab ကို

v – ဒေါင်လိုက် tab ကို

\ – ဘယ်ဘက်မျဉ်းစောင်း

"- ကိုနှစ်ချက်ကိုးကား (ကျွန်တော်တစ်ဦး string ကိုကြေငြာသို့နှစ်ဆကိုးကားထားပါချင်တဲ့အခါအသုံးပြုနေသည်)

& # 39; – လူပျိုကိုးကား (ကျွန်တော်တစ်ဦး string ကိုကြေငြာသို့နှစ်ဆကိုးကားထားပါချင်တဲ့အခါအသုံးပြုနေသည်)

Objective-C ဒေတာအမျိုးအစား Qualifiers

ရှည်လျားသော

ရှည်လျားကြာမြင့်စွာ

တိုတောင်းသော

လက်မှတ်ရေးထိုး / လက်မှတ်မထိုး

ယခုတွင်သင်သည် Objective-C လုပ်ငန်းရှင်များများ၏စာရင်းမှာကြည့်ရှုမည်

ဂဏန်းသင်္ချာလုပ်ငန်းရှင်များ

အော်ပရေတာဖျေါပွခကျြ

– (unary) တန်ဖိုးကို Negates

* မြှောက်

/ တိုင်း

+ အပိုဆောင်း

– နုတ်

% modulo

တာဝန်ကျတဲ့လုပ်ငန်းရှင်များ

compound တာဝန်လုပ်ငန်းရှင်များ

အော်ပရေတာဖျေါပွခကျြ

x ကအတွက်က x + = ဒါဟာ x နှင့် y ကို Add အသုံးပြုသည်က y နှင့်စတိုးဆိုင်ရလဒ်။

x က – ဒါဟာ x ကိုအတွက်က x နှင့်ဘဏ္ဍာရလဒ်ကနေ y ကိုနုတ်ဖို့အသုံးပြုနေသည် = y က။

ဒါဟာက x အတွက် y နှင့်စတိုးဆိုင်ရလဒ်အားဖြင့် x ကိုများပြားအသုံးပြုသည်က x * = y က။

ဒါဟာက x အတွက် y နှင့်စတိုးဆိုင်ရလဒ်အားဖြင့် x ကို Divide အသုံးပြုသည်က x / = y က။

ဒါဟာက x အတွက်က x နှင့် y နှင့်စတိုးဆိုင်ရလဒ်အပေါ် modulo အသုံးပြုသည်က x% = y က။

x က & = y က x နှင့် y ကိုအပေါ်ကျိုးကြောင်းဆီလျော်၏ X နှင့်စစ်ဆင်ရေးမှရလဒ်ပေးပို့ပါ။

x က | = y က x နှင့် y ကိုအပေါ်ယုတ္တိ OR စစ်ဆင်ရေး၏ x ကိုမှရလဒ်ပေးပို့ပါ။

x ကို ^ = y ကယုတ္တိသီးသန့်၏က x မှ OR x နှင့် y ကိုအပေါ်ရလဒ်ပေးပို့ပါ။

increment နှင့်လျှော့လုပ်ငန်းရှင်များ

နှိုင်းယှဉ်မှုလုပ်ငန်းရှင်များ

အော်ပရေတာဖျေါပွခကျြ

x က y ကိုညီမျှလျှင်စစ်မှန်သော x ကို == y က။

x က> y ကစစ်မှန်သော x ကို y ကထက် သာ. ကြီးမြတ်သည်လျှင်။

x က> = y ကစစ်မှန်သော x ကိုထက် သာ. ကြီးမြတ်သို့မဟုတ် y ကိုညီမျှသည်လျှင်။

x က> = ဎဎသောနေရာများအားဖြင့် x ကိုညာဘက် Shift နဲ့ x ကိုမှရလဒ်ပေးပို့ပါ။

Objective-C (ကျနော်နောက်ပိုင်းတွင်ဤဆောင်းပါး၌အသေးစိတ်အတွက်ကိုဖော်ပြရန်ပါလိမ့်မယ်) တွင်ဖိုင်ကို extensions တွေကိုသုံးသီးခြားစီကြေညာကုဒ်လုပ်ကွက်ဖြစ်မယ့်လူတန်းစား၏ interface ကို, အကောင်အထည်ဖော်မှုနှင့် instantiation လိုအပ်ပါတယ်:
extension

source အမျိုးအစား
.h ဒါဟာလူတန်းစား, အမျိုးအစား, function ကိုများနှင့်စဉ်ဆက်မပြတ်ကြေညာချက်များရရှိထားသူဖြစ်ပါသည်။
ဒါဟာအရင်းအမြစ်ဖိုင်တွေရရှိထားသူများနှင့် Objective-C နဲ့ C code ကိုနှစ်ဦးစလုံးမဆံ့နိုငျပါ .m ။
ဒါဟာ Objective-C နဲ့ C code ကိုအပြင်ကို C ++ ကုဒ်ဆံ့ .mm ။ သင်အမှန်တကယ်သင့်ရဲ့ Objective-C ကုဒ်ကနေ C ++ တို့အတန်းသို့မဟုတ် features တွေကိုရည်ညွှန်းမှသာလြှငျဤ extension ကိုအသုံးပြုရပါမည်။

ပထမဦးစွာအစီအစဉ်: ကွိုဆိုရည်ရွယ်ချက်ကို C

ငါက iPhone ဖွံ့ဖြိုးရေးကောင်စီအဘို့ဤသင်ခန်းစာတိကျမ်းစာ၌လာသည်ငါကဲ့သို့သောရိုးရှင်းနှင့်အတူစတင်ခြင်းငါ Objective-C အစီအစဉ်များအတွက်ကောင်းတဲ့အချက်တွေရှိပါတယ်ရွေးချယ်အစီအစဉ်ကို "ရည်မှန်းချက်ကို C မှလှိုက်လှဲစွာကြိုဆိုပါသည်" ။ ကောင်းတဲ့အချက်တွေရှိပါတယ်စတင်အားဖြင့်ပရိုဂရမ်ကိုရေးသား Start; သင်ရုံ "စစ်ဌာနချုပ်လိုင်း Utility ကို" အော "ဖောင်ဒေးရှင်းက Tool ကို" ကိုရွေးချယ်ပါနှင့်သင့်အစီအစဉ်ကိုမှနာမည်တစ်ခုပေးဖို့လိုအပ်ပါတယ်။ ဥပမာအားဖြင့်ငါကဒီမှာ "WelcomeObjectiveC" ကို ရွေးချယ်. ယခုဒီဖိုင်ထဲမှာသင့်ရဲ့ program ကိုရေးသားစတင်, "WelcomeObjectiveC.m" ဟုအဆိုပါစီမံကိန်းအားပြတင်းပေါက်ဖွင့်လှစ်ပါလိမ့်မယ်သင်မီးမောင်းထိုးပြ file ကိုမြင်ရပါလိမ့်မည်။

နမူနာ
#import
int အဓိက (int argc, const char * argv ())
{

NSLog ( "ကြိုဆိုပါတယ်, Objective C က" @);

ပြန်လာများ (0);
}

အခုတော့ပထမဦးဆုံးပရိုဂရမ်တစ်ခုတည်ဆောက်ပြီးတော့အဆောက်အဦးများနှင့် Go ကိုခလုတ်နှိပ်ခြင်းသို့မဟုတ်နှိပ်က run ။ သင့်ရဲ့အစီအစဉ်တွင်မဆိုအကုန်လုံးအမှားအယွင်းများရှိနေကြသည်မဟုတ်ခဲ့လျှင်, အချက်တွေရှိပါတယ်အောင်မြင်စွာ compiles နှင့်သင့် program ကို run ပေးနိုင်ပါတယ်။

သင့်ရဲ့အစီအစဉ်၏ output ကိုတွေ့မြင်ရန်, အချက်တွေရှိပါတယ် console ကိုပြတင်းပေါက်ဖွင့်လှစ်။ သင်က Run ကို menu ကနေ Console ကိုရွေးချယ်ခြင်းသို့မဟုတ်နှိပ်ခြင်းဖြင့် console ကိုပြတင်းပေါက်ဖွင့်နိုင်ပါတယ်။

ထိုအရပ်၌သင် console ကိုပြတင်းပေါက်၌ output ကိုရှိသည်:
ကြိုဆိုပါတယ်, Objective C က

အခုတော့ code ကိုဘယ်လိုအလုပ်လုပ်တယ်ဆိုတာကိုကြည့်ပါ။

ပထမဦးဆုံးအညီငါ Foundation.h ဖိုင်ကို import နှင့်ဤမြေတပြင်လုံးသွင်းကုန်ကြေညာချက်ဖောင်ဒေးရှင်းမူဘောင်အတွင်း Foundation.h header file ကိုကြည့်ရှုရန် compiler ကအကြောင်းကြား။

ယခုတွင်သင်သည်ဖောင်ဒေးရှင်းမှမူဘောင်သည်အဘယ်အရာကိုတောင်း? OK ကိုပထမဦးဆုံးမူဘောင်ကဘာလဲတွေ့မြင်: တစ်ဦးကမူဘောင်အစိတ်အပိုင်းများ-header ကိုဖိုင်များ, စာကြည့်တိုက်, ပုံများ, အသံတစ်ဦးစုဆောင်းမှုဖြစ်ပြီး, တစ်ခုတည်းယူနစ်သို့အတူတကွပိုပြီး-အုပ်စုဖွဲ့။

Foundation မှမူဘောင်: အဆိုပါဖောင်ဒေးရှင်းကမူဘောင် Objective-C အတန်းနှင့်ဖောင်ဒေးရှင်းမူဘောင်တစ်ခုအခြေစိုက်စခန်းအလွှာအဖြစ်သတ်မှတ်ပါတယ် (Apple ကဆိုပါတယ်) စိတျထဲတှငျဤရည်မှန်းချက်များနှင့်အတူဒီဇိုင်းပြုလုပ်ထားသည်:

ဒါဟာအစီအစဉ်များတွင်အသုံးပြုအခြေခံ utility ကိုအတန်း၏သေးငယ်တဲ့အစုကိုပေးစွမ်းသည်။

ဆော့ဖျဝဲဖှံ့ဖွိုးတိုးပိုမိုလွယ်ကူစေတော်မူသောဤကဲ့သို့သော Deallocation အဖြစ်တသမတ်တည်းစည်းဝေးကြီးများကိုမိတ်ဆက်။

ယူနီကုဒ်ညှို့, အရာဝတ္ထုဇွဲနှင့်အရာဝတ္ထုဖြန့်ဖြူးထောက်ပံ့ပေးသည်။

သယ်ဆောင်ရလွယ်ကူမြှင့်တင်ရန်, OS ကိုလွတ်လပ်ရေး၏အဆင့်သည်။

Next ကိုပင်မရာထူးအမည်ဖြစ်ပါသည်
int အဓိက (int argc, const char * argv ())
{

// ရာထူးအမည် Code ကို
}

(စံကို C ထဲမှာရှိသကဲ့သို့) ကိုအဓိက function ကိုဘယ်မှာအစီအစဉ်ကိုကွပ်မျက်စတင်ရန် Objective-C compiler ကပြောပြသည်။ အောက်မှာဖေါ်ပြတဲ့အတိုင်းအဓိက function ကိုခုနှစ်တွင်သင်အမျိုးမျိုးသောလယ်ကွင်းတွေ့မြင်:

ပြန်လာအမျိုးအစား: function ကိုအားဖြင့်ပြန်လာသောရလဒ်များ၏ဒေတာအမျိုးအစားကိုသတ်မှတ်ပေးသည်။ function ကိုရလဒ်ပြန်လာမပါဘူးဆိုရင်ထို့နောက်ပျက်ပြယ်သတ်မှတ်ရပါမည်။

function ကိုအမည်: ဒါဟာလျှောက်လွှာ code အတွင်းကနေဟုခေါ်သည်အခါ function ကိုရည်ညွှန်းပါလိမ့်မည်သည့်အားဖြင့်နာမည်ဖြစ်ပါတယ်။ မဟုတ်ရင်ဟာငြိမ်သတ်မှတ်ထားတဲ့ အသုံးပြု. သတ်မှတ်ထားသောမဟုတ်လျှင်, function ကိုအမည်များကမ္ဘာလုံးဆိုင်ရာဖြစ်ကြပြီးစုစည်းအမှားများကိုရှောင်ရှားရန်လျှောက်လွှာများ၏အခြေအနေတွင်အတွင်းထူးခြားတဲ့သူဖြစ်ရမည်, သတိပြုပါ။

argn အမျိုးအစား: function ကိုရှောကျသှားပုအငြင်းအခုံ၏အမျိုးအစား။

argn အမည်: အဆိုပါအငြင်းအခုံ function ကိုကုဒ်အတွက် refereed ခံရဖို့ဖြစ်ပါတယ်သောအမည်။

အခုဆိုရင် (NSLog မှကြွလာ) နှင့် @ "ညှို့"
NSLog ( "ကြိုဆိုပါတယ်, Objective C က" @);

ဤတွင် NSLog () Objective-C အတွက်တန်ဖိုး print ထုတ်ရန်အသုံးပြုသည့်တစ်ဦးကိုကိုး function ကိုဖြစ်ပါတယ်။ NSLog ငါတို့သည်နှစ်ဆကိုးကားကြားရှိ string ကိုရှောက်သွား Objective-C ဘာသာစကားသော့ချက်စာလုံးများအဖြစ်ကိုယ်စားပြုကြောင်း @ သင်္ကေတနှင့်အတူစတင်ခဲ့တယ်။

"ပြန်လာများ (0);" အဓိက၏ကွပ်မျက်ပြီးနောက် () သုညတန်ဖိုးကိုတစ်ဦးတို့ကပြန်ရောက်တာဖြစ်ပါတယ်ပြီးဆုံး ကျွန်တော်တို့ရဲ့အစီအစဉ်ကိုအောင်မြင်စွာပြီးစီးခဲ့ကြောင်းပြောပါတယ်ပေးသောကြေညာချက်။

interface, အကောင်အထည်ဖော်ရေးနှင့် Instantiation

သငျသညျအပြည့်အဝစုံတဲ့ iPhone ကို applications များဖွံ့ဖြိုးတိုးတက်ဖို့ရည်ရွယ်ချက်, C ကိုသုံးနိုင်သည်; ကအရာဝတ္ထုကိုဗဟိုပြု။ ဒါဟာသုံးပိုင်းရှိပါတယ်:

interface

အကောင်အထည်ဖော်ရေး

Instantiation

interface

interface Objective-C ထဲမှာအရာဝတ္ထုလူတန်းစားဖြစ်ပါသည်, စည်းဝေးကြီးတစ်ခုကိုအသုံးပြုပုံ developer များတစ်ဦး header file ကိုအတွက် interface ကိုနေရာချ, ကအတန်းကြေငြာပါရှိသည်နှင့်အတန်းနဲ့သက်ဆိုင်တဲ့ဥပမာအားဖြင့် variable တွေကိုနှင့်နည်းလမ်းများသတ်မှတ်ပါတယ်။ အဆိုပါ interface ကို by.h suffixed ဖြစ်ပါတယ်, အင်တာဖေ့နှင့်ဆက်နွယ်သောသူအပေါင်းတို့ကို variable တွေကိုပါရှိသော parentheses ပေမယ့်နည်းလမ်းများအဆိုပါကွင်း၏အပြင်ဘက်, သေးသေးသတစ်ခုဖွင့်လှစ် @interface နှင့်ပိတ်ပွဲ @end အားဖြင့်ဖွဲ့စည်းထားသောဖွဲ့စည်းပုံအတွင်း၌ကြေညာနေကြသည်။

Interface ၏ဖွဲ့စည်းပုံ
@interface အပိုင်းအစများ: NSObject
{

// ဥပမာအားဖြင့် variable တွေကို

int ပိုင်းဝေ;

int ပိုင်းခြေ;
}
– (ပျက်ပြယ်) setNumerator: (int) NUM;
– (ပျက်ပြယ်) setDenominator: (int) တွင်း;
– (ပျက်ပြယ်) ပုံနှိပ်;
@end // အပိုင်းအစများ

Code ကိုလမ်းလျှောက်

ပထမဦးဆုံး line ကနေ Start:
@interface အပိုင်းအစများ: NSObject

code တွေရဲ့အထက်လိုင်းအစိတ်အပိုင်းအမည်ရှိအသစ်တခုလူတန်းစားများအတွက်အသစ်တစ်ခု interface ကိုဖန်တီး NSObject ကတော့အစိတ်အပိုင်းလူတန်းစား / အဆိုပါ NSObject လူတန်းစားကနေအမွေဆက်ခံအခြေစိုက်ကြောင်းသတ်မှတ်ပါတယ်ကြောင်း။ အဆိုပါ compiler ကအသိပေး
{

// ဥပမာအားဖြင့် variable တွေကို

int ပိုင်းဝေ;

int ပိုင်းခြေ;
}

အခုတော့ template ကိုဒီဇိုင်းရန်, အထက်ပါကျွန်ုပ်တို့သည်အစိတ်အပိုင်းအရာဝတ္ထုနှင့်အတူအလုပ်လုပ်ရန်ရန်အသုံးပြုသည့် curly မသန်စွမ်းပဲအတွင်းဖန်တီးနေတဲ့ template ကိုဖြစ်ပါတယ်။ ဤတွင်ကျနော်တို့ကိုတဖန်ရိုက်ထည့်-၏ကိန်းနှစ်ခုဒြပ်စင်ပိုင်းဝေအမျိုးအစား-၏ကိန်းများနှင့်ပိုင်းခြေကြေညာကျနော်တို့ကိုသူတို့ကဤဒြပ်စင်ဖို့ဥပမာအားဖြင့် variable တွေကိုဖြစ်ကြောင်းပြောနိုင်ပါသည်။

ကျွန်ုပ်တို့ variable ကိုကြေငြာအကြောင်းပြောဆိုသည့်အခါပထမဦးဆုံးအကျွန်ုပ်တို့သည်အဘယ်သို့ကျနော်တို့ & # 39 compiler ကိုပြောပြရန်လိုအပ်ပါသည်; သိုလှောင်မယ့်ပြန်လည်နှင့်အဘယ်သို့ဆိုင်အမျိုးအစား-၏၌တည်၏။ ဒီနေရာတွင်ယခုများအတွက်သိထားသင့်သောအရေးအပါဆုံးမျိုးကွဲအမျိုးအစားအချို့နေသောခေါင်းစဉ်:

int: ကိန်း (မရှိ, ဒဿမအမှတ်နှင့်အတူနံပါတ်များ) သိုလှောင်သည်။

char: တစ်ဇာတ်ကောင်သိုလှောင်သည်။

float: ဒဿမအချက်များနှင့်အတူနံပါတ်များကိုသိုလှောင်သည်။

နှစ်ဆ: တိကျမှန်ကန်မှုတစ်ဦးကတော့ float အဖြစ်တူပေမယ့်နှစ်ဆ။

အခုတော့နည်းလမ်းကြေငြာထံသို့လာကြ၏။
– (ပျက်ပြယ်) setNumerator: (int) NUM;
– (ပျက်ပြယ်) setDenominator: (int) တွင်း;
– (ပျက်ပြယ်) ပုံနှိပ်;

အထက်ပါကုဒ်လိုင်းဖွင့်နည်းလမ်းကိုကြေညာချက်များဖြစ်ကြသည်။ s ကိုပြန်လာအမျိုးအစားနှင့်မဆို, သငျသညျအသီးအသီးနည်းလမ်း၏နာမကိုပေးဖို့ရှိသည်တဲ့နည်းလမ်းကိုကြေငြာခြင်း, နည်းလမ်း & # 39 ခုနှစ်တွင်
အငြင်းပွားမှုများ။ သို့သော်အထက်ပါကုဒ်အနည်းငယ်ကွဲပြားခြားနားကြည့်; မရိုးရှင်းတဲ့နည်းလမ်းကြေငြာသောကြောင့်ဖြစ်သည်မဟုတ်လော ဟုတ်တယ်, ပထမဦးဆုံးနည်းလမ်းများနှစ်ခုအမျိုးအစားများဖြစ်ကြောင်းနှင့် defining syntax ကိုလည်းနှစ်မျိုးကြောင်းသတိရ:

အဆိုပါအပေါငျးလက်ခဏာ (+) ကို အသုံးပြု. သတ်မှတ်ထားတဲ့ပထမဦးဆုံး

(-) ကအနုတ်လက္ခဏာနိမိတ်လက္ခဏာကို အသုံးပြု. သတ်မှတ်ထားတဲ့ဒုတိယအ

အဲဒီနှစျခုနည်းလမ်းများအကြားကွာခြားချက်ကဘာလဲ? အဆိုပါအပေါငျးလက်ခဏာ (+) ကို အသုံးပြု. သတ်မှတ်ပေးသောနည်းလမ်းများလူတန်းစားနည်းလမ်းများဖြစ်ကြသည်သူတို့ interface ကိုအပေါငျးတို့သဖြစ်ရပ်အပေါ် operate ။ သူတို့ကအင်တာဖေ့စမှာသတ်မှတ်ထားတဲ့ဆိုတိကျတဲ့ဥပမာအားဖြင့် variable တွေကိုဝင်ရောက်ခွင့်ရှိသည်မဟုတ်ကြဘူး။ (-) ကအနုတ်လက္ခဏာနိမိတ်လက္ခဏာကို အသုံးပြု. သတ်မှတ်နည်းလမ်းများဥပမာအားဖြင့်နည်းလမ်းများကိုဖြစ်ကြောင်း, ထိုသူတို့ interface ကိုတစ်ဦးသတ်သတ်မှတ်မှတ်ဥပမာအားဖြင့်အပေါ် operate ။ သူတို့က interface ကိုတစ်ခုဥပမာအားနဲ့သက်ဆိုင်တဲ့ variable တွေကိုရယူနိုငျပါသညျ။

အဆိုပါနည်းလမ်းကိုနာမတော်ဖြစ်ပါတယ်ပြီးနောက်ပထမဦးဆုံးနှစ်ဦးကိုလိုင်းများအတွက်ယခင်ကုဒ်မှပြန်လာပြီးနောက်ကပ်တွယ်မှုကိုအူမကြီးကျွန်တော့်ကိုဦးဆောင် dash နိမိတ်လက္ခဏာနှင့်အတူနည်းလမ်းကြေငြာ start နှင့်ပြန်လာအမျိုးအစားပြီးတော့ကွင်းထဲတွင်နည်းလမ်းကို "setNumerator နှင့် setDenominator" ၏အမည်ကား တစ်ဦး parameter သည်လာမည့်လာမယ့်ကြောင်း compiler နဲ့များနှင့်လူသားအရိပ်အမြွက်, ထို့နောက်အငြင်းအခုံအမျိုးအစားကိုကွင်း၌တည်ရှိ၏နှင့်နောက်ဆုံးမှာ parameter သည်အမည်အားတည်ရှိပြီးဖြစ်သည်။

အဆိုပါနည်းလမ်းကိုကြေညာချက်များတစ်စိတ်တစ်ပိုင်း၏နောက်ဆုံးအညီကျနော်တို့ဘာမှပြန်မပါဘဲ print ထုတ်။
@end // အပိုင်းအစများ

ကျနော်တို့အဆုံးမှာအထက်ပါလိုင်းရေး; ကအစိတ်အပိုင်းလူတန်းစားများ၏ကြေငြာအဆုံးသတ်ထားသည်။

အကောင်အထည်ဖော်ရေး

အဆိုပါ interface ကိုကြေငြာပြီးနောက်ကြကုန်အံ့ & # 39; s ကိုကို interface အကောင်အထည်ဖော်မှုမှဆက်လက်ဆောင်ရွက်; သင် interface ကိုလေ့လာသင်ယူကြပါပြီအဖြစ်သာအတန်း interface နဲ့မဟုတ်ဘဲနည်းလမ်းများသူတို့ကိုယ်သူတို့ declarees; အမှန်တကယ်ကုဒ်အကောင်အထည်ဖော်မှု၌ရေးထားလျက်ရှိ၏ဖြစ်ပါတယ်။ အကောင်အထည်ဖော်ရေး (နည်းလမ်း) ဖိုင်များကိုပုံမှန်အားဖိုင်ကို extension.m ရှိသည်။ interface အကောင်အထည်ဖော်မှုကို interface နှင့်အဓိပ္ပါယ်တူ၏။ အားလုံးကလပ်စတစ် @implementation … @end ပိတ်ပင်တားဆီးမှုအတွင်းပါရှိသောနေကြသည်။ အဆိုပါ interface ကိုတင်သွင်းကြောင်းအကောင်အထည်ဖော်မှုပြုမိသောအခါပြုရမည်ကိုတဦးတည်းကိုပိုပြီးအရာ။

အကောင်အထည်ဖော်မှု၏ဖွဲ့စည်းပုံ
#import
@implementation အစိတ်အပိုင်း}
– (ပျက်ပြယ်) ပုံနှိပ်
{

printf ( "% ဈ /% i", ပိုင်းဝေ, ပိုင်းခြေ);
}
– (ပျက်ပြယ်) setNumerator: (int) numN
{

ပိုင်းဝေ = numN;
}
– (ပျက်ပြယ်) setDenominator: (int) denD
{

ပိုင်းခြေ = denD;
}
@အဆုံး

Code ကိုလမ်းလျှောက်

ပထမဦးဆုံး line ကနေ Start:
#import

ငါပြီးသားကရှင်းပြသည်အဖြစ် Objective-C ကို interface နှင့်အဓိပ္ပါယ်ဖိုင်ကို "Fraction.h" ၌ပါရှိသောခဲ့သည်။ အကောင်အထည်ဖော်မှု၏ထိုအချိန်ကကျနော်တို့အထက်ပါကုဒ်မှာပြထားတဲ့အတိုင်းထိုကဲ့သို့သောအစအဦးမှာဒီဖိုင်ကိုတင်သွင်းဖို့လိုအပ်ပါတယ်။ အဘယ်ကြောင့်? အတန်းတစ်ခုဥပမာအားဖြင့်ဖန်တီးမည်သည့် module ကိုထည့်သွင်းရန်တစ်အတန်းများအတွက်ကြေငြာနည်းလမ်း, ဒါမှမဟုတ်ဥပမာအတန်းများတွင်ကြေငြာထားတဲ့ဥပမာအားဖြင့် variable ကိုမြွက်ဖို့မက်ဆေ့ခ်ျကိုပို့ပေးသည်။

လူတန်းစားအစိတ်အပိုင်းများအတွက်အကောင်အထည်ဖော်ရေး
အစိတ်အပိုင်း @implementation

အထက်ပါကုဒ် @implementation အတွက်လူတန်းစားများ၏ GUTS များအတွက်ကုဒ်မိတ်ဆက်သောညွှန်ကြားချက်ဖြစ်ပါသည်။ @implementation witting ပြီးနောက်ကျနော်တို့အတန်း၏အမည်ကိုရေးပါ။ သငျသညျ Objective-C လမ်းညွှန်ချက်အပြီး semicolon မလိုအပ်ပါဘူးဘာလို့လဲဆိုတော့ဒီမျဉ်းပေါ်မှာအဘယ်သူမျှမ Trail semicolon, ရှိပါသည်။

အခုတော့တစ်ဦးချင်းစီနည်းလမ်းများသတ်မှတ်
– (ပျက်ပြယ်) ပုံနှိပ်
{

printf ( "% ဈ /% i", ပိုင်းဝေ, ပိုင်းခြေ);
}
– (ပျက်ပြယ်) setNumerator: (int) numN
{

ပိုင်းဝေ = numN;
}
– (ပျက်ပြယ်) setDenominator: (int) denD
{

ပိုင်းခြေ = denD;
}

ပထမဦးဆုံးအညီကျနော်တို့ကတန်ဖိုးများကို print ထုတ်ခြင်းနှင့်သင်ကျနော်တို့အနေနဲ့ integer ဖြစ်တဲ့အတွက်အပါအဝင်ကြောင့်အသုံးပြုတဲ့ပုံစံချပေးလက္ခဏာသက်သေဖြစ် "i%" ၏နိမိတ်လက္ခဏာကိုမြင်လိမ့်မည်။ သည်အခြား variable တွေကိုသူတို့ရဲ့ကိုယ်ပိုင် format နဲ့သတ်မှတ်ထားတဲ့ရှိသည်:

% ဈ: integer ဖြစ်တဲ့အတွက်

%, f: float

% က e: ကို double

% က c: char

ဒါကအမှန်တကယ်နည်းလမ်းများအကောင်အထည်ဖော်ဆောင်ရွက်နေသော; အထက်ပါကုဒ်အတွက်ကျနော်တို့က interface ကိုဖိုင်ထဲမှာကဲ့သို့တူညီသောထုံးစံ၌နည်းလမ်းများကြေညာပေမယ့် semicolon မရှိဘဲ။ အဆိုပါ @interface နှင့် @implementation အကြားကွဲပြားခြားနားသောရန် parameter သည်အမည်များများအတွက်ပိုကောင်း s; ဒီနေရာမှာသတိထားမိဖို့ပိုအရာတစ်ခုမှာသူက & # 39 ဘာဖြစ်လို့လဲဆိုတော့ကျနော်တို့က parameters တွေကိုအမည်ပြောင်းသောကွောငျ့ဖွစျသညျ။ ထိုအခါနည်းလမ်း code တွေရဲ့ခန္ဓာကိုယ်အတွင်းရှိဥပမာအားဖြင့် variable တွေကိုရည်ညွှန်းပါလိမ့်မယ်။

နောက်ဆုံးလိုင်း:
@အဆုံး

အကောင်အထည်ဖော်မှု၏ပိတ်ပင်တားဆီးမှုပိတ်။

Instantiation

သင် iPhone ပေါ်မှာ Objective-C ကိုအသုံးပြုနေရတဲ့အခါသင်မှတ်ဉာဏ်ခွဲဝေချထားပေးရန်အဖြစ်အရာဝတ္ထုကိုဖန်တီးရန်လိုအပ်ပါလိမ့်မည်။ သငျသညျအတနျးသူ့ဟာသူတစ်ခုခွဲဝေ Message ပေးပို့မှတ်ဉာဏ်ခွဲဝေချထားပေးရန်စေရန်, ဤလုပ်ငန်းစဉ် instantiating ဟုခေါ်သည်။ သင်တစ်ဦးအရာဝတ္ထု instantiate အခါ, မှတ်ဉာဏ်ခွဲဝေတာဖြစ်ပါတယ်, ပြီးတော့ကြောင့်မှတ်ဉာဏ်အချို့အသုံးဝင်သောက default တန်ဖိုးများနသည်, အကြောင်း, သငျသညျလောလောလတ်လတ်ခွဲဝေမှတ်ဉာဏ်နှင့်အတူရကျပန်းတန်ဖိုးများထက်အခြားအရာတစ်ခုခုသည်။

Instantiation ၏ဖွဲ့စည်းပုံ
int အဓိက (int argc, const char * argv ())
{

// အသစ်တစ်ခုကိုဥပမာအားဖြင့်ကို

အစိတ်အပိုင်း * frac = ((အစိတ်အပိုင်းခွဲဝေ) init);

// set ကိုတန်ဖိုးများ

(frac setNumerator: 2);

(frac setDenominator: 5);

// ရိုးရှင်းသောပုံနှိပ်

printf ( "အစိတ်အပိုင်းများ၏တန်ဖိုးကိုဖြစ်ပါသည်:");

(frac ပုံနှိပ်); printf ( " n");

// မှတ်ဉာဏ်ကိုလွှတ်

(frac လွှတ်ပေးရန်);

ပြန်လာပါ 0 င်;
}

ဒီနေရာတွင်က output ဖြစ်လိမ့်မည်:
အစိတ်အပိုင်း၏တန်ဖိုးသည်: 2/5

Code ကိုလမ်းလျှောက်

ဥပမာအားဖြင့်ဖန်ဆင်းခြင်း
အစိတ်အပိုင်း * frac = ((အစိတ်အပိုင်းခွဲဝေ) init);

အထက်ပါဒီနေရာမှာကျနော်တို့ယေဘုယျအားဖြင့်နှုတ်ကပတ်တော်ကို "init" နဲ့ prefixed သို့မဟုတ်ရိုးရိုး init သောလုပ်ငန်းခွင်သုံးပါလိမ့်မယ်, သင်ထားတဲ့အရာဝတ္ထု instantiate ဘယ်လောက်ဖြစ်ပါတယ်။ ကနဦးအနေနဲ့ဥပမာအားဖြင့်ပြန်လည်ရောက်ရှိ – များသောအားဖြင့်အတူတူပင်ဥပမာအားဖြင့်, စတင်ဖို့။ ထိုကြောင့်သင်သည်တတ်နိုင်နှင့်အမြဲခွဲဝေနှင့်ကုဒ်များ၏တူညီသောလိုင်းအတွက်ကနဦးမခေါ်သင့်ပါတယ်။

တန်ဖိုးများကိုသတ်မှတ်မည်
(frac setNumerator: 2);
(frac setDenominator: 5);

အထက်ပါကုဒ်လိုင်းပဲရိုးရိုး frac အပေါ် setNumerator နှင့် setDenominator နည်းလမ်းတောင်းဆိုကြောင့် parameter သည် 2 နှင့် 5 ဖြတ်သန်းနေသည်။

ပုံနှိပ်ခြင်း
printf ( "အစိတ်အပိုင်းများ၏တန်ဖိုးကိုဖြစ်ပါသည်:");
(frac ပုံနှိပ်);
printf ( " n");

ဒါဟာရိုးရှင်းစွာ frac ပေါ်တွင်ပုံနှိပ်နည်းလမ်းခေါ်ဆိုနှင့်တန်ဖိုးများ / output ကိုရိုက်ထုတ်သည်။

အခမဲ့မှတ်ဉာဏ်
(frac လွှတ်ပေးရန်);

အိုင်ဖုန်းပေါ်တွင် Objective-C ကိုအသုံးပြုပြီးတဲ့အခါမှာသင်အသစ်သို့မဟုတ်မိတ္တူခွဲဝေအသုံးပြုနေသူများကဖန်တီးပြီတ္ထုကိုလွှတ်ရပေမည်။ ဤသည်မှတ်ဉာဏ်စီမံခန့်ခွဲမှုနှင့်အတူလုပ်ဖို့ရှိပါတယ်။ ဤသည်ကိုလည်းကို C / C ++ မှ function နှင့်ညီမျှ၏, အားလုံးသုံး languaes အမှိုက်သရိုက်အစုအဝေးကိုမသုံးကြဘူး။ object တစ်ခုဖြန့်ချိရန်သင့်အားရိုးရှင်းစွာအရာဝတ္ထုရန် "လွှတ်ပေးရန်" မက်ဆေ့ခ်ျကိုပို့ပါ။

ကြစို့ & # 39; အကွိမျမြားစှာန့်သတ်ချက်များနှင့်အတူ s ကိုအစီအစဉ်

Objective-C ထဲမှာသင်မျိုးစုံ parameters တွေကိုအတူနည်းလမ်းကိုသုံးနိုင်သည်။ ဤရွေ့ကား parameters တွေကိုတူညီတဲ့အမျိုးအစားတစ်ခုသို့မဟုတ်ကွဲပြားခြားနားသောအမျိုးအစားဖြစ်နိုင်ပါတယ်။

ကြစို့ & # 39; s ကိုမျိုးစုံ parameters များကိုအသုံးပြုခြင်းရှင်းလင်းဖို့ဥပမာကိုကြည့်:

class.h အတွက်
#import
@interface အတန်းအစား: NSObject {}

မျိုးစုံ parameter သည်များအတွက် // ကြားမပြောဘဲနေနည်းလမ်း

– (int) ခွဲ: (int) ဈ andj: (int) ည andk: (int) ဋ;
@အဆုံး

အဓိကအရာအငြင်းပွားမှုများအတွက် separator ဖြစ်ပါတယ် ":"; ":" သင်သုံးပြီးငြင်းခုံမဆိုအရေအတွက်ကိုသတ်မှတ်နိုင်သည်။

class.m အတွက်
#import
#import "Class.h"
@Mplementation MyClass
– (int) ခွဲ: (int) ဈ andj: (int) ည andk: (int) ဋ;
{

ကိုယ့်ည + ဋ + ပြန်လာ;
}
@အဆုံး

အဓိကမှာတော့
#import
#import "Class.m"
အဓိက int ()
{

class * အတန်းအစား = ((class ခွဲဝေ) init);

printf ( "နုတ်ဖြစ်ပါတယ်:% ဃ", (အတန်းအစားခွဲ: 16 andj: 8 andk: 5));

(အတန်းအစားဖြန့်ချိ); ပြန်လာ;
}

အဆိုပါ Output ဖြစ်ပါသည်:
နုတ်ဖြစ်ပါတယ်: 3

designated လုပ်ငန်းခွင်

တည်ဆောက်မယ့်လူတန်းစားတစ်ရပ်ဥပမာအားဖြင့်ဖန်တီးစတငျဖို့ရှိပါတယ်။ တစ်ဦးလူတန်းစားများအတွက်, အချို့ကနဦး variable တွေကိုမျှော်လင့်အမျိုးမျိုးသော parameters တွေကိုနှင့်အတူမျိုးစုံတည်ဆောက်ရှိစေနိုင်ပါတယ်။ ဒါပေမယ့် Objective-C အတွက်ပထမဦးဆုံးသင်အမှိုက်ပုံပေါ်မှတ်ဉာဏ်ခွဲဝေချထားပေးရန်။ တစ်ဦးလုပ်ငန်းခွင်၏ညီမျှသော s ကို; Next ကိုသင်တစ်ဦးနည်းလမ်းကို Objective-C & # 39 မျိုးဖြစ်သည့်ကနဦးခေါ်ကိုခေါ်ပါ။

အဆိုပါဥပမာကိုကြည့်ပါ

class Header ကို: Employee.h
#import
@interface န်ထမ်း: NSObject
{

* နာမကိုအမှီ NSString;

int အသက်အရွယ်;

int mobileNumber;
}

class အကောင်အထည်ဖော်ရေး: Employee.m
#import "Employee.h"
@implementation န်ထမ်း
– (အိုင်ဒီ) init
{

ကိုယ့်ကိုယ်ကို = (စူပါ init);

(မိမိကိုယ်ကို) လျှင်

{

ဤနေရာတွင် // မိတ်ဆက်ကုဒ်။

နာမကိုအမှီ = @ "";

အသက်အရွယ် = 0;

mobilenumber = 0;

}
ကိုယ့်ကိုယ်ကိုပြန်လာ;
}
@အဆုံး

Code ကိုလမ်းလျှောက်

ပထမဦးစွာငါစံန်ထမ်းလူတန်းစား created; ကမဆိုနည်းလမ်းပဲတချို့ရိုးရှင်းတဲ့အဖွဲ့ဝင် variable တွေကိုပါဝင်ခြင်းမရှိပါ; အမည်ရအမည်, အသက်, နှင့် mobilenumber ။

ထိုအခါအကောင်အထည်ဖော်ရေးအတွက်သင် "init" ဟုခေါ်နေတဲ့နည်းလမ်းကိုကြည့်ရှုပါ။ ဒါဟာဒီနည်းလမ်းကိုအသစ်ဖန်တီးအရာဝတ္ထုစတငျနှင့်တည်ဆောက်ကို C # သို့မဟုတ် C ++ ပြုပါအတိအကျအဖြစ်, လုံခြုံပြည်နယ်ထဲသို့သွင်းထားရန်အသုံးပြုသည်အချက်တွေရှိပါတယ်သင်သည်ဖန်တီးတစ်ခုချင်းစီကိုသစ်ကိုအတန်းအစားဖိုင်တစ်ခု boilerplate အဖြစ်ဖန်တီးသောစံ Initiative နည်းလမ်းဖြစ်ပါတယ်။

access ကိုအခွင့်ထူး

Objective-C မှာတော့ access ကိုအခွင့်ထူးသာ variable တွေကိုအပေါ်သတ်မှတ်ထားသောနိုင်ပါသည်။ Objective-C ထဲမှာ default access ကို @protected ဖြစ်ပါတယ်။ access ကိုအခွင့်ထူးအမျိုးအစားများဖြစ်ကြသည်:

@public

@private

@protected

အဆိုပါ @protected accessor အဆိုပါ subclass အတွက်လက်လှမ်းဒြပ်စင်နိုင်ပါတယ်။

ခြွင်းချက်ကိုင်တွယ်

ကို GNU Compiler Collection ကို (GCC) ဗားရှင်း 3.3 နှင့်နောက်ပိုင်းတွင်အသုံးပြုခြင်း, Objective-C ခြွင်းချက်ကိုင်တွယ်သည်ဘာသာစကား-Level ထောက်ခံမှုပေးသည်။ ခြွင်းချက်တခုကိုအစီအစဉ်ကိုသေဒဏ်စီရင်၏ပုံမှန်စီးဆင်းမှု interrupts တဲ့အထူးအခွအေနေဖြစ်ပါတယ်။ ခြွင်းချက်တခုကိုထုတ်ပေးစေခြင်းငှါအဘယ်ကြောင့်အကြောင်းပြချက်အမျိုးမျိုးရှိပါတယ်။ ဒါဟာသည်အခြားခေတ်သစ်ဘာသာစကားမှာကဲ့သို့အအလုပ်လုပ်တယ်: သူတို့ NSException ထံမှ (များသောအားဖြင့်) တို့ကိုအမွေခံရသောအတန်းအားဖြင့်ကိုယ်စားပြုနေကြသည်။

မှတ်ချက်: Exception ကိုင်တွယ်မှသာ, Mac OS X ကို 10.3 အတွက်ထောက်ခံနေသည်

ခြွင်းချက်ကိုင်တွယ်အတှကျအသုံးပွု compiler လမ်းညွှန်ချက်များ:

@try: ခြွင်းချက်တခုကိုပစ်ထားတဲ့ပိတ်ပင်တားဆီးမှု။

@catch: တစ်ပါပိတ်ပင်တားဆီးမှုများကပစ်ချခြွင်းချက်ကိုင်တွယ်ရန်မည်သို့မည်ပုံသတ်မှတ်ပါတယ်; ဤသည်များသောအားဖြင့်တစ်ဦး NSException အရာဝတ္ထုဖြစ်ပါတယ်။

@finally: ခြွင်းချက်တခုကိုပစ်ချသို့မဟုတ်မပြုလုပ်လျှင်ကြောင့်ကွပ်မျက်ခံရခြင်းဖြစ်သည်။

@throw: သင်၏အစီအစဉ်ကိုတစ်ခုခြွင်းချက်ကို detect တခါ, အဲဒါကိုကိုင်တွယ်ကုဒ်ဖို့ချွင်းချက်ပြန့်ပွားရပေမည်။ ဒီ code ချွင်းချက် handler ကိုလို့ခေါ်ပါတယ်။ ဤသည်တစ်ခုလုံးကို

ခြွင်းချက်တခုကိုဝါဒဖြန့်၏ဖြစ်စဉ်ကို "တစ်ခုခြွင်းချက်နဲ့ပေါက်" အဖြစ်ရည်ညွှန်းတယ်။

ခြွင်းချက်-ကိုင်တွယ်ခြင်း Algorithm
ခွက် * ခွက် = ((ခွက်စာရေးတံ ချ. ဝေ) init);
@try
{

(ခွက်ဝစွာ);
}
@catch (NSException * ချွင်းချက်)
{

NSLog ( "အဓိက: ဖမ်းမိ% @:% @" @, (ချွင်းချက်အမည်), (ချွင်းချက်အကြောင်းရင်း));
}
@finally
{

(ခွက်လွှတ်ပေးရန်);
}

အဆိုပါ Exception Catching
@try { … }
@catch (CustomException * cex) { … }
@catch (NSException * NEX)
{

// ဒီအဆင့်မှာလိုအပ်သောစီမံဆောင်ရွက်နေစဉ် …
}
@catch (အိုင်ဒီ UX) { … }
@finally
{

// လိုအပ်သောစီမံဆောင်ရွက်နေစဉ် …
}

ခြွင်းချက်နဲ့ပေါက်
NSException * ချွင်းချက် = (NExException exceptionWithName: "MugfullException" အကြောင်းပြချက် @: userInfo "ဒီခွက်ကိုရေနှင့်ပြည့်ဝ၏" @: nil); @throw ခြွင်းချက်;

အမွေကို

အမွေဥစ္စာကိုပရိုဂရမ်မှတကယ့်ကမ္ဘာမြင်ကွင်းတစ်ခုခုတတ်၏။ ဒါဟာဝိသေသလက္ခဏာများ, ပြီးတော့သည်အခြားအတန်းတစ်အချို့သောသတ်မှတ်ချက်ကြောင့်လူတန်းစားကနေဆင်းသက်လာဖန်တီးနိုင်ပါတယ်ရှိပါတယ်တဲ့လူတန်းစားသတ်မှတ်ခံရဖို့ခွင့်ပြုပါတယ်။ အဆိုပါဆင်းသက်လာလူတန်းစားမိဘလူတန်းစား၏အင်္ဂါရပ်များအားလုံးအမွေများနှင့်ပုံမှန်အားထို့နောက်၎င်း၏ကိုယ်ပိုင်အချို့ကိုအင်္ဂါရပ်တွေကထပ်ပြောသည်။ အတန်းကနေတို့ကိုအမွေခံရသောအပြင်ငါတို့သည်လည်းအတန်းတိုးချဲ့နိုင်ပါတယ်။ ကျွန်တော်တစ်ဦးလူတန်းစားတိုးချဲ့တဲ့အခါမှာကျနော်တို့အနေနဲ့လက်ရှိအဆင့်အတန်းကို ယူ. ပြီးသားရရှိနိုင်သောအရာကိုမှအပိုဆောင်းလုပ်ဆောင်ချက်ကိုထည့်ပါ။

inheritance.gif

စို့? S ကပထမဦးဆုံး NSMutableString ယူ. , အပေါ်ကပုံနားလည်ပါသည်။ NSMutableString က NSString ကနေအမွေအဓိပ်ပာယျ, မိဘတစ်ဦးအဘို့အ NSString သိရသည်။ ဤအတောအတွင်း NSString မိဘတစ်ဦးအဖြစ် NSObject ရှိပါတယ်, ဒါကြောင့် NSObject ထံမှအမွေရ, ထို့နောက် NSMutableArray က NSArray ထံမှအမွေဆိုလိုတာကမိဘတစ်ဦးများအတွက် NSArray ရှိပါတယ်။ ဤအတောအတွင်း NSArray မိဘတစ်ဦးအဖြစ် NSObject ရှိပါတယ်, ဒါကြောင့် NSObject ထံမှအမွေရ, ထို့နောက်ပြီးခဲ့သည့် NSNumber က NSValue ထံမှအမွေအဓိပ်ပာယျ, မိဘတစ်ဦးအဘို့အ NSValue ရှိပါတယ်။ ဤအတောအတွင်းမိဘတစ်ဦးအဖြစ်လည်း NSObject NSValue, ဒါကြောင့် NSObject ထံမှအမွေရ။

နည်းပညာအသစ်သင်ယူဖို့အသစ်သောအသုံးအနှုန်းများမရှိဘဲဘာမျှမဖြစ်သနည်း အတိအကျဒါကြောင့်ဒီနေရာမှာအမွေဥစ္စာအချို့ကိုအသစ်သောအသုံးအနှုန်းများနေသောခေါင်းစဉ်:

စူပါလူတန်းစား: အဆိုပါ superclass ထံမှတို့ကိုအမွေခံရသောခဲ့ကြသည်youÂအတန်းပါပဲ။

မိဘလူတန်းစား: "တစ်ဦး superclass" အတွက်နောက်ထပ်စကားလုံးမိဘလူတန်းစားဖြစ်ပါတယ်။

sub class ကို: အဆိုပါ subclass အမွေတော်လူတနျးစားလုပ်နေတာဖြစ်ပါတယ်။

ကလေးအတန်းအစား: ကလေးအတန်းအစားတစ်ဦး "subclass" အတွက်အခြားစကားလုံးဖြစ်ပါတယ်။

ဖျက်ရေးရန်: သင်က၎င်း၏အကောင်အထည်ဖော်မှုကိုပြောင်းလဲလိုတဲ့အခါတစ်ခုသင်အမွေဆက်ခံနည်းလမ်း override ။

ကြစို့ & # 39; s ကိုအမွေကိုဘယ်လိုအလုပ်လုပ်တယ်ဆိုတာကိုကြည့်ပါတဲ့စက်ဝိုင်းနှင့် Rectangle ဥပမာယူပါ။ ကျွန်မဥပမာအားဖြင့်ဒီကိုရှင်းပြသွားနေပါတယ်အောက်ပါပုံကိုကြည့်ပါ:

inheritance.gif

drawing.h အတွက်
@interface ပုံဆွဲ: NSObject
{

DrawShape ဘောငျ;
}
– (ပျက်ပြယ်) setBounds: (DrawShape) ဘောငျ;
– (ပျက်ပြယ်) ဆွဲ;
@end // ပုံဆွဲ

drawing.m အတွက်
@implementation ပုံဆွဲ
– (ပျက်ပြယ်) setBounds: (DrawShape) ခ
{

ဘောငျ = ခ;
}
// setBounds
– (ပျက်ပြယ်) သရေကျ {} // သရေကျ
@end // ပုံဆွဲ

Circle.h အတွက်
@interface စက်ဝိုင်း: NSObject
{

DrawShapebounds;
}
– (ပျက်ပြယ်) setBounds: (DrawShape) ဘောငျ;
– (ပျက်ပြယ်) ဆွဲ;
@end // စက်ဝိုင်း

Circle.m အတွက်
@implementation စက်ဝိုင်း
– (ပျက်ပြယ်) သရေကျ
{

NSLog (limits.x "% @ အတွက် (% ဃ% ဃ% ဃ% ဃ) မှာစက်ဝိုင်းဆွဲ" @,

bounds.y, bounds.width, bounds.height,
} // သရေကျ
@end // စက်ဝိုင်း

Rectangle.h အတွက်
@interface Rectangle: NSObject
{

DrawShape ဘောငျ;
}
– (ပျက်ပြယ်) setBounds: (DrawShape) ဘောငျ;
– (ပျက်ပြယ်) ဆွဲ;
@end // Rectangle

Rectangle.m အတွက်
စတုဂံ @implementation
– (ပျက်ပြယ်) သရေကျ
{

NSLog (, limits.x, limits.y "% @ အတွက် (% ဃ% ဃ% ဃ% ဃ) မှာ rect drawing" @

bounds.width, bounds.height,
} // သရေကျ
@end // Rectangle

အဓိကမှာတော့
int အဓိက (int argc, const char * argv ())
{

အိုင်ဒီပုံစံမျိုးစုံ (2);

DrawShape shap1 = {5, 5, 20, 40};

ပုံစံမျိုးစုံ (0) = (အသစ်စက်ဝိုင်း);

(ပုံစံမျိုးစုံ (0) setBounds: rect0);

DrawShape shap2 = {50, 60, 70, 80};

ပုံစံမျိုးစုံ (1) = (အသစ် Rectangle);

(ပုံစံမျိုးစုံ (1) setBounds: rect1);

ပြန်လာများ (0);
} // အဓိက

က output ၌သင်တို့မြင်ရကြလတံ့:

(5 5 20 40) မှာစက်ဝိုင်းဆွဲ
(50 50 60 70) မှာစတုဂံပုံဆွဲ

မှတ်ဉာဏ်စီမံခန့်ခွဲမှု

တစ်ဦးကိုကိုးကား-ရေတွက်ပတ်ဝန်းကျင်တွင်မှတ်ဉာဏ်စီမံခန့်ခွဲမှုအတှကျအသုံးပွုအခြေခံမော်ဒယ် NSObject protocol ကိုနှင့်စံနည်းလမ်းအမည်ပေးခြင်းစည်းဝေးကြီးတစ်ခုကိုအတွက်သတ်မှတ်ထားသောနည်းလမ်းများပေါင်းစပ်ခြင်းဖြင့်ထောက်ပံ့ပေးသည်။ object တစ်ခု deallocated အခါအလိုအလြောကျမဖြစ်၏ဖြစ်ပါတယ်။ "

memory_management.jpg

မှတ်ဉာဏ်စီမံခန့်ခွဲမှုအတွက်သင်သည်၎င်း၏ "ကိုဆက်လက်ထိန်းသိမ်းရန် count က" (ကိုးကား၏နံပါတ်) ကိုတိုးပွားစေတော်မူသော, (obj ကိုဆက်လက်ထိန်းသိမ်းရန်) ခေါ်၏ အခါသင်တို့သည်နောက်တဖန်သင်တို့ကို (obj လွှတ်ပေးရန်) ခေါ်ကလိုအပ်ပါတယ်။ ကောင်တာသုညရောက်ရှိသည့်အခါ dealloc ထို့နောက်ဟုခေါ်သည်။

dealloc ၏ syntax
– (ပျက်ပြယ်) dealloc
{

// deallocation ၏မက်ဆေ့ဂ်ျ။

printf ( "Deallocation အစိတ်အပိုင်း n");

(စူပါ dealloc);
}

အများအားသင်တစ်ဦးဆင်းဖို့ပေးပို့ထားတဲ့မှတ်ဉာဏ်စီမံခန့်ခွဲမှုအတွက်အသုံးမက်ဆေ့ခ်ျများနေသောခေါင်းစဉ်:

နေရာချထားခြင်း

အသစ်က

လက်ရှိထား

လွှတ်ပေး

autorelease

မိတ္တူ

ကိုကိုးမှတ်ဉာဏ်စီမံခန့်ခွဲမှု၏ရွှေစည်းမျဉ်းများ:

ယင်းအရာဝတ္ထုဆက်ပြီး: အရာဝတ္ထုဆက်ပြီးမဆိုအရာဝတ္ထုများ၏ထိန်းသိမ်းထားရေတွက်တိုးကဆက်လက်ထိန်းသိမ်းရန်သတင်းစကားကိုပေးပို့ဖို့ကိုဆိုလိုသည်။ s ကိုရည်ညွှန်းရေတွက်ပြီးလျှင်, လွှတ်ပေးရန်သတင်းစကားကြောင့် decrements; အဆိုပါထိန်းသိမ်းထားသတင်းစကားအရာဝတ္ထု & # 39 increments ။

လုပ်ဖို့မှတ်မိဖို့တစ်ခုမှာပိုပြီးအရာကိုသင် "ခွဲဝေ" သော့ချက်စာလုံးနှင့်အတူဖန်တီးသောအရာဝတ္ထုကိုလွှတ်ဖို့ဖြစ်ပါတယ်။

ယင်းအရာဝတ္ထုလွှတ်ပေးပြီး: ကလွတ်မြောက်ရေးအတွက် Message ပေးပို့ဆိုအရာဝတ္ထုများ၏ retention ကိုရေတွက်လျှော့ရန်။

ဤတွင်ကျွန်မ retainCount ၏ဥပမာတစ်ခုပေးကမ်းနေပါတယ်:

NewClass.h အတွက်
#import
@interface NewClass: NSObject
// NewClass ကြေငြာ။
@အဆုံး

NewClass.m အတွက်
#import "NewClass.h"
@implementation NewClass
// NewClass ချက်နှင့်အဓိပ္ပါယ်။
@အဆုံး

အဓိကမှာတော့
#import "NewClass.m"
#import
အဓိက int ()
{

// NewClass အတွက် objects ။

NewClass * newClassObj1 = ((NewClass ခွဲဝေ) init);

NewClass * newClassObj2 = ((NewClass ခွဲဝေ) init);

အရာဝတ္ထု၏ // လက်ရှိပြည်တွင်းရေးရေတွက်။

printf ( "newClassObj1 count ကဆက်လက်ထိန်းသိမ်းရန်ပင်ဖြစ်သည်:% ဃ n", (newClassObj1

retainCount)); printf ( "newClassObj2 count ကဆက်လက်ထိန်းသိမ်းရန်ပင်ဖြစ်သည်:% ဃ n n"

(newClassObj2 retainCount));

// increment ရေတွက်

(newClassObj1 ကိုဆက်လက်ထိန်းသိမ်းရန်);

(newClassObj2 ကိုဆက်လက်ထိန်းသိမ်းရန်);

(newClassObj1 ကိုဆက်လက်ထိန်းသိမ်းရန်);

// ပုံနှိပ်ရေတွက်။

printf ( "newClassObj1 count ကဆက်လက်ထိန်းသိမ်းရန်ပင်ဖြစ်သည်:% ဃ n", (newClassObj1

retainCount)); printf ( "newClassObj2 count ကဆက်လက်ထိန်းသိမ်းရန်ပင်ဖြစ်သည်:% ဃ n n"

(newClassObj2 retainCount));

// လျှော့မှတ်တော်မူ၏။

(newClassObj1 လွှတ်ပေးရန်);

newClassObj2 လွှတ်ပေးရန်);

(newClassObj1 လွှတ်ပေးရန်);

// ပုံနှိပ်ရေတွက်။

printf ( "newClassObj1 count ကဆက်လက်ထိန်းသိမ်းရန်ပင်ဖြစ်သည်:% ဃ n", (newClassObj1

retainCount)); printf ( "newClassObj2 ရေတွက်ဖြစ်ပါတယ်ထိန်းသိမ်းထား:% ဃ n",

(newClassObj2 retainCount));

// ယခုတ္ထု deallocate ။

(newClassObj1 လွှတ်ပေးရန်);

(newClassObj1 လွှတ်ပေးရန်);

ပြန်လာပါ 0 င်;
}

အဆိုပါ Output ဖြစ်ပါသည်:
newClassObj1 count ကဆက်လက်ထိန်းသိမ်းရန်ပင်ဖြစ်သည်: 1
newClassObj2 count ကဆက်လက်ထိန်းသိမ်းရန်ပင်ဖြစ်သည်: 1

newClassObj1 count ကဆက်လက်ထိန်းသိမ်းရန်ပင်ဖြစ်သည်: 3
newClassObj2 count ကထိန်းသိမ်းထား: 2

newClassObj1 count ကဆက်လက်ထိန်းသိမ်းရန်ပင်ဖြစ်သည်: 1
newClassObj2 count ကဆက်လက်ထိန်းသိမ်းရန်ပင်ဖြစ်သည်: 1

ပရိုတိုကော

Objective-C ထဲမှာတစ်ဦးက protocol ကိုကို C # ထဲမှာ interfaces ကဲ့သို့ဖြစ်၏။ ဒါဟာမဆိုအတန်းအစားအားဖြင့်အကောင်အထည်ဖော်နိုင်နည်းလမ်းများမိန့်တော်မူ၏။ ဒါဟာနည်းလမ်းများအစုတခုအကောင်အထည်ဖော်ရန်အတန်းလိုအပ်မယ့်နည်းလမ်းဖြစ်ပါတယ်။ ကျနော်တို့ကမရှိမဖြစ်လိုအပ်တဲ့နည်းလမ်းများများ၏စာရင်းကိုဖြစ်ပါသည်, တာလူတန်းစားတစ်ခုသို့မဟုတ်အမျိုးအစားကဲ့သို့သော protocol ကို define ။ ပရိုတိုကောကြေညာချက်များတစ်လူတန်းစားကြေငြာဆင်တူကြည့်ရှု, သူတို့ကမကြာခဏကိုယ်စားလှယ်တ္ထုများအတွက် interface ကိုသတ်မှတ်အသုံးပြုကြသည်။

protocol များတရားဝင်နှင့်အလွတ်သဘောနှစ်ခုအမျိုးအစားများဖြစ်ကြသည်။ တစ်ဦးကတရားဝင် protocol သည် @protocol ညွှန်ကြားချက်နှင့်အတူကြေညာသည်, သော်လည်းအလွတ်သဘော protocols များအမှန်တကယ်အမျိုးအစားဖြစ်ကြသည်ကို၎င်း, အမျိုးအစားအဖြစ်ကြေညာခဲ့သည်။ ဒီတော့ဟုတ်ကဲ့, က & # 39; ထူးဆန်း့ပေမယ့်သူတို့ကအလွတ်သဘော protocols များအကောင်အထည်ဖေါ်ရန်အမျိုးအစားကိုအသုံးပြုပါ။ အလွတ်သဘောကျော်တရားဝင် protocol ၏အကျိုးကျေးဇူးထို compiler # 39 & နိုင်ပါတယ်ဖြစ်၏ type ကိုစစ်ဆေးမှုများ & # 39; မျှော်လင့်ထားသည့် s; object တစ်ခုသေချာစေရန်ကြောင်း & # 39 protocol ကိုမှညီ။ အလွတ်သဘောနှင့်အတူ, က & # 39; ဒီအသေချာစေရန်တက်ပြုစုဖို့ပါ။

Protocols အသုံးဝင်သည့်အခြေအနေများ:

ပထမဦးစွာပြုလုပ်အခြားသူများကိုအကောင်အထည်ဖေါ်ရန်မျှော်လင့်ထားကြသည်နည်းလမ်းများကြေညာရန်အသုံးပြုသည်။

ငါတို့သည်လည်းယင်း၏လူတန်းစားဖုံးကွယ်စဉ်တစ်ခုအရာဝတ္ထုဖို့ interface ကိုကြေညာရန်ကိုသုံးနိုင်သည်။

hierarchical ဆက်စပ်မစပ်ဆိုင်ကြောင်းကိုအတန်းအကြားတူညီဖမ်းယူဖို့အသုံးပြုတတိယအနည်းဆုံးနောက်ဆုံးသော်လည်းမအခြေအနေ။

တစ်ဦး protocol ကိုအတွက်နည်းလမ်းများ default အနေဖြင့်တစ်ဦးလူတန်းစားအတွက်အကောင်အထည်ဖော်ခံရဖို့လိုအပ်သည်။ သင်တို့မူကားလွန်း optional ကိုအဖြစ်နည်းလမ်းများသတ်မှတ်နိုင်ပါတယ်။

@optional

@required

@protocol UserProtocol

– (ပျက်ပြယ်) RMethod1;
@optional – (ပျက်ပြယ်) OMethod1;

– (ပျက်ပြယ်) OMethod2;
@required

– (ပျက်ပြယ်) RMethod2;
@အဆုံး

အပြီးသတ်သည်

ဤသည် Objective-C ၏အခြေခံခြုံငုံသုံးသပ်ချက်ဖြစ်ပါတယ်။ သငျသညျ & # 39 သကဲ့သို့၎င်း, မြင်ကြပါ, ဘာသာစကားကိုတက်ကောက်ဖို့တော်တော်လွယ်ကူပါတယ်။ အဲဒီမှာ & # 39; အားလုံးငါသင်ယူဖို့သာအခြေခံ syntax ကိုဖုံးလွှမ်းရန်ကြိုးစားနေပါ၏ဘာသာစကားကိုအကြောင်းကိုမ။

သင်ဤအသေးစားအလှူငွေကြိုက်နှစ်သက်ပါက, ငါသည်သင်တို့၏အားပေးမှုကိုရှာနေပါတယ်။



Source by Manish Tewatia