အခြား အပိုင်းက Series တွေကတော့
- Day 1: Introduction to C Programming
- Day 2: Introduction to Objective C
- Day 3: Working With Class
- Day 4: More Work With Class
- Day 5: Memory Management
Class from Apple (and some history)
Apple မှာ classes တွေ အများကြီးရှိပြီး တော်တော်များများဟာ NS နဲ့ စပါတယ်။ NS ဆိုတာက NextStep ရဲ့ အတိုကောက်ပေါ့။ NeXT ဆိုတာကတော့ Steve Jobs Apple ကနေ ထွက်ပြီးနောက်ပိုင်းမှာ workstation computer တွေပေါ်မှာ run ဖို့ operation system တွေပါ။ NeXTSTEP မှာ object orientated programming ကို အသုံးပြုထားပါတယ်။ NS ကလည်း NeXTSTEP ကနေ ဆင်းသက်လာတာပါ။ Apple က NeXTSTEP ကို ဝယ်ပြီးနောက် Mac OS X ကို NeXTSTEP ပေါ်မှာ အခြေခံခဲ့ပြီး ထုတ်ခဲ့ပါတယ်။
အချို့ common classes တွေကို အောက်မှာ ဖော်ပြထားပါတယ်။
- NSString ကတော့ string စာကြောင်းတွေ အတွက်ပေါ့။
- NSMutableStrng ကတော့ mutable string တွေအတွက်ပါ။
- NSArray ကတော့ immutable object တွေ အတွက်ပါ။
- NSMutableArray ကတော့ object array mutable တွေအတွက်ပေါ့။
- NSNumber ကတော့ number တွေအတွက်ပေါ့။
object က immutable ဆိုတာကတော့ object ကို create လုပ်ပြီး assign လုပ်တဲ့အခါမှာ value က static ဖြစ်သွားပါတယ်။ ပြန်ပြောင်းလို့မရတော့ပါဘူး။ တကယ်လို့ object က mutable ကတော့ ပြောင်းလဲလို့ရတဲ့ dynamic ပေါ့။ object ကို create လုပ်ပြီး နောက်ပိုင်း ပြန်ပြောင်းလို့ရပါတယ်။
Pointers and Initializing
ကဲ.. code လေးကို အရင် ကြည့်ရအောင်
#import int main (int argc, const char * argv[]) { NSString *testString; testString = [[NSString alloc] init]; testString = @"Here's a test string in testString!"; NSLog(@"testString: %@", testString); return 0; }
Xcode ကနေ File > New Project > Mac OSX > Application > Command Line Tool > Type: Foundation ကနေ create လုပ်ထားလိုက်တာပါ။ ပေးထားတဲ့ နာမည်နဲ့ source folder အောက်က extension .m file လေးကို အပေါ်က code လို ပြင်ကြည့်ပါ။
အပေါ်က code တွေကနေ ရှင်းပြပါမယ်။
int main(int argc, const char * argv[]) {
C သမားတွေကတော့ သိပြီးသားပါ။ program တစ်ပိုဒ်စရင် main နဲ့ စပါတယ်။ two parameter ရှိပြီး , နဲ့ ပိုင်းထားပါတယ်။ arguments passing လုပ်ဖို့အတွက်ပေါ့။
NSString *testString; testString = [[NSString alloc] init];
အဲဒါကတော့ testString ကို pointer နဲ့ create လုပ်ပြီး NSString object ကို ခေါ်လိုက်တာပေါ့။ အပေါ်က တစ်ကြောင်းပြီးသွားပေမယ့် tesString က object အနေနဲ့ပဲ ရှိနေအုံးမှာပါ။ နောက် တစ်ကြောင်းကမှ testString ထဲမှာ init လုပ်ပေးလိုက်တာပါ။
အဲဒါကို အောက်ကလို ပြန်ပြင်ရေးလို့ရပါတယ်။
testString = [NSString alloc]; [testString init];
nested ရေးတာကတော့ တစ်ကြောင်းတည်းပြီးသလို အခု လို ၂ ကြောင်းနဲ့ ရေးလိုက်လည်း ရပါတယ်။
testString = @"Here's a test string in testString!";
NSString မှာ စာတွေ ထည့်ဖို့အတွက် @ sign ကို ရှေ့ ဆုံးမှာ ထည့်ဖို့လိုပါတယ်။
NSLog(@”testString: %@”, testString);
%@ ဆိုတာကတော့ Objective-C object ကို ဆိုလိုတာပါ။ %@ နေရမှာ testString ကို အစားထိုးမှာပါ။ ကဲ … အပေါ်က code ကို run ကြည့်လိုက်ပါ။ Command + Shfit + R ကို နှိပ်ပြီး Debugger Console ကို ဖွင့်ဖို့လိုပါတယ်။ NSLog နဲ့ ထုတ်ထားတာတွေကတော့ Debugger Console မှာပဲ မြင်ရမှာပါ။
Inheritance
NSString ကို ကျွန်တော်တို့ သိပါပြီ။ NSMutableString , NSArray စတာတွေကလည်း single NS Class တွေပါပဲ။ code တွေ အားလုံးမှာ init လုပ်ဖို့ လိုပါတယ်။ အဲလို လုပ်ရတာ အလုပ်ပိုတယ်လို့ ထင်နေတယ်မဟုတ်လား။ ဟုတ်ပါတယ်။ root Class က NSObject ဖြစ်ပြီး သူ့ ပေါ်မှာ implemented လုပ်ထားရပါတယ်။ ဘာကြောင့်လည်းဆိုတော့ အဆင့်ဆင့် inherit အချင်းချင်းလုပ်ထား ပါတယ်။
NSMutableString ဆိုရင် NSString က parent ပါ။ NSString ရဲ့ parent ကတော့ NSObject ပါ။
NSObject မှာ method အသုံးပြုဖို့အတွက် init လုပ်ပါတယ်။ ဒါကြောင့် subclass တွေမှာလည်း init ပါလာပါတယ်။ NSObject ဟာ တကယ်တန်းတော့ return ကိုယ့်ဘာသာ မပြန်ထားပါဘူး။ ဒါကြောင့် method တွေကို overwritten လုပ်လို့ရပါတယ်။ NSArray class ဟာ init ကို override လုပ်ထားပြီး functionality တွေ ပေါင်းထည့်ထားပါတယ်။ အဲဒါကြောင့် memory avaiable ဖြစ်ဖို့အတွက်ရယ် လိုအပ်တဲ့ instance variable တွေကိုလည်း ပြင်ဆင်နိုင်ပါတယ်။
inheriting classes တွေက ထပ်ပြီး extend လုပ်နိုင်တဲ့အတွက် အသုံးဝင်လှပါတယ်။ ကျွန်တော်တို့တွေဟာ extend class ကို ထပ်ဆောက်ပြီး လိုအပ်တဲ့ functionality တွေကို ထပ်မံ ဖြည့်ပေးနိုင်ပါတယ်။ ကျွန်တော်တို့ ကိုယ်ပိုင် NSString version ကို ဖန်တီးပြီး methods တွေ ထပ်ဖြည့်နိုင်ပါတယ်။
Summary
ကျွန်တော်တို့ Class တွေကို ဘယ်လို အသုံးချရမလဲ ဘယ်လို Inheritance လုပ်ထားလဲ။ နောက်ပြီး inheritance လုပ်ထားတဲ့အတွက် ဘယ်လို အသုံးဝင်သလဲဆိုတာတွေကို ဖော်ပြထားပါတယ်။
ဒီအပိုင်းက ကျွန်တော် သိပ်ပြီး ပိုင်နိုင်မှု မရှိပဲနဲ့ ဘာသာပြန်ထားရတဲ့ အပိုင်းဆိုလည်း မမှားပါဘူး။ မှားနေတာတွေ ရှိရင် ထောက်ပြနိုင်ပါတယ်။
reference: http://mobile.tutsplus.com/tutorials/iphone/learn-objective-c-day-3/