နိဒါန်း
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 ကိုဖုံးလွှမ်းရန်ကြိုးစားနေပါ၏ဘာသာစကားကိုအကြောင်းကိုမ။
သင်ဤအသေးစားအလှူငွေကြိုက်နှစ်သက်ပါက, ငါသည်သင်တို့၏အားပေးမှုကိုရှာနေပါတယ်။