UI Design Resources

တစ်ခါတစ်လေ ကျွန်တော်တို့တွေ iphone , ipad UI Design ကို စဉ်းစားတဲ့ အခါ ဖြစ်ဖြစ် web design အတွက် UI ကို စဉ်းစားတာ ဖြစ်ဖြစ် ဘယ်လို သုံးသင့်ရမလဲဆိုတာ စဉ်းစားမရတာတွေ ရှိတတ်တယ်။ ကျွန်တော်က Designer မဟုတ်တဲ့အတွက် Design ပိုင်းကို လန်ထွက်နေအောင် မဆွဲနိုင်ဘူး။ သို့ပေမယ့် ဘယ် UI Design သုံးသင့်တယ်ဆိုတာကို နေ့စဉ် ထိတွေ့နေရတဲ့ ပတ်ဝန်းကျင်ကြောင့် သိနိုင်တယ်။ အခု တလော ရုံးမှာ အလုပ်များနေတာကြောင့် Designer ကလည်း project တစ်ခုကို အချိန်ပြည့် ယူနေရတယ်။ လက်ရှိ ကျွန်တော့် project တွေအတွက် UI Design ကိုယ့်ဘာသာကိုယ် ဖန်တီးရပါတော့တယ်။ Continue reading “UI Design Resources”

Instagram တွင် 1 Million Users ရှိပြီ

iPhone photo sharing application ဖြစ်တဲ့ Instagram ဟာ 1 million registered users ရှိပြီလို့ ဒီနေ့ပဲ ကြေငြာလိုက်ပါတယ်။ ၁၀ ပတ်ကြာ app ကို public ထုတ်ပြီးနောက်မှ 1 millions registered users ရှိလာခဲ့ပါတယ်။ Instagram က အရမ်းလျင်မြန်စွာ လူအသုံးများလာတဲ့ Application တစ်ခုလို့ ဆိုလို့ရတယ်။ iPhone နဲ့ ဓာတ်ပုံရိုက်ပြီး ဓာတ်ပုံတွေကို လွယ်လင့် တကူ share ရုံမက filter ကောင်းကောင်းလေးတွေပါ ထည့်လို့ ရတဲ့အတွက် လူသုံးများလာရပါတယ်။ Foursquare အနေနဲ့ 1 Million users ရဖို့ ၁ နှစ် အချိန်ယူရပြီး twitter အနေနဲ့ကတော့ ၂ နှစ် အချိန် ယူခဲ့ရပါတယ်။
Continue reading “Instagram တွင် 1 Million Users ရှိပြီ”

Learn Objective-C : Day 6

ဒီနေ့တော့ Day 6 ရောက်ပါပြီ။ ဒီနေ့က categories လို့ခေါ်တဲ့ cocoa Touch အကြောင်းပါ။ လက်ရှိ object တွေကို implement ထပ်လုပ်တဲ့အကြောင်းပေါ့။ အရင်တုန်းက ရေးခဲ့တဲ့ အပိုင်းတွေကတော့

Other Articles In This Series

Categories

Categories ဆိုတာ ဘာလဲ ? Objective-C tutorials တော်တော်များများမှာ categories ကို တွေ့နိုင်ပါတယ်။ အလွန်ပဲ အသုံးဝင်ပြီးတော့ code ကော သပ်သပ်ရပ်ရပ် ဖြစ်စေတယ်ဆိုလည်း မမှားပါဘူး။ အခုကျွန်တော်တို့တွေ မကြာခင် လေ့လာရတော့မှာပါ။ NSString function မှာ ကျွန်တော်တို့ ကိုယ်ပိုင် function တွေ ထည့်ချင်တဲ့ အခါတွေရှိပါတယ်။ ဥပမာ။။ a chatacters တွေကို 4 ပြောင်းလိုက်တဲ့ function မျိုးပေါ့။ ကျွန်တော်တို့တွေ NSString ကို subclass ရှိပြီး ကိုယ်တိုင် method ကိုယ့်ဘာသာကိုယ် ထည့်သွင်းနိုင်ပါတယ်။ subclass ပိုင်းကို ကျွန်တော်တို့တွေ car class ဆောက်တုန်းက တွေ့မြင်ဖူးမှာပါ။ subclass က တော်တော်ကောင်းမွန်ပါတယ်။ သို့ပေမယ့် categories က ပိုပြီး ပြည့်စုံကောင်းမွန်တယ်လို့ ဆိုလို့ရပါတယ်။

Categories က ကျွန်တော်တို့တွေကို methods အသစ်တွေကို ရှိနေတဲ့ class မှာ ထပ်ဖြည့်ထည့်ခွင့်ပေးထားပါတယ်။ ဥပမာ။။ 100 NSString Objects ကို သင့် app မှာ သုံးထားတယ်ဆိုပါဆို့။ reverstring function ကို extra method အနေနဲ့ ထည့်ချင်တယ်ဆိုရင်တော့ custom subclass ကို အသုံးပြုနိုင်ပါတယ်။ သို့ပေမယ့် Categories နဲ့ဆိုရင်တော့ ပိုပြီး ရိုးရှင်းပြီး လွယ်ကူတယ်လို့ ဆိုနိုင်ပါတယ်။ နောက်ပြီး ရှိနေဲ့ method တွေကိုလည်း overwrite လုပ်ပြီး အစားထိုးဖို့ကလည်း ဖြစ်နိုင်ပါတယ်။ Continue reading “Learn Objective-C : Day 6”

3 Opensource iPhone Game on App Store

iPhone game တွေထဲမှာလည်း Opensource Game လေးတွေ ရှိပါတယ်။ အောက်မှာပြထားတဲ့ game ၃ ခုဟာ လက်ရှိ app store မှာ ရှိနေတဲ့ game ပါ။

အဲဒီအတွက် source ကိုတော့ github မှာ ရှိထားပြီးသားပါ။

Continue reading “3 Opensource iPhone Game on App Store”

Learn Objective-C : Day 5

ကဲ… Part 5 ကိုတောင် ရောက်လာပါပြီဗျာ။ ဒီနေ့မှာတော့ memory mangagement အပိုင်းကို လေ့လာရအောင်။ Script Language တော်တော်များများ (PHP ကဲ့သို့ ) ဟာ memory management ပိုင်းကို အလိုအလျောက်ဆောင်ရွက်ပေးပါတယ်။ ဒါပေမယ့် Objective-C မှာကတော့ သတိထားဖို့လိုပါတယ်။ object ကို create လုပ်ပြီးရင် release လုပ်ပေးဖို့လည်းလိုပါတယ်။

Other Articles In This Series

iPhone Development လုပ်ပြီဆိုရင် memory management ပိုင်းက အရေးပါပါတယ်။ ဘာလို့လည်းဆိုတော့ iPhone က memory limit က Desktop နဲ့ ယှဉ်ရင် နည်းပါတယ်။

Two Approaches

Objective-C မှာ memory management အတွက် methods ၂ မျိုးရှိပါတယ်။ ပထမက reference counting နဲ့ ဒုတိယကတော့ garbage collection ပါ။ သင့်အနေနဲ့ စဉ်းစားလို့ရတာကတော့ manual နဲ့ automatic ပေါ့။ reference counting ဆိုတာက programmer က code ထည့်ပေးရပြီး garbage collection ကတော့ system ကို အလိုအလျောက် memory managing လုပ်ခိုင်းတာပေါ့။ Garbage collection က iPhone မှာ အလုပ်မလုပ်ဘူးဆိုတာကို သတိထားဖို့လိုပါတယ်။ အဲဒါက Mac developer တွေအတွက်သာ အသုံးဝင်ပါတယ်။

Reference Counting

ကဲ… ကျွန်တော်တို့app ကို memory manage ဘယ်လိုလုပ်မလဲ။ ပထမဆုံးအနေနဲ့ ဘယ်အချိန်မှာ code က memory ကို အသုံးပြုပါသလဲ။ ကျွန်တော်တို့တွေက class instance (object) ကို ဖန်တီးလုပ်ပြီဆိုတာနဲ့ memory က allocated လုပ်ပါတယ်။ object က သေးသေးလေးပေမယ့် app က တဖြည်းဖြည်း ကြီးလာတာနဲ့အမျှ memory ပြဿနာတွေက ဖြစ်လာနိုင်ပါတယ်။

ကဲ.. ဥပမာ တစ်ခုလောက် ကြည့်ရအောင်။ ကျွန်တော်တို့ Drawing App တစ်ခုဆွဲပါတယ်။ user ဆွဲတဲ့ shape တစ်ခုတိုင်းက separate object တွေပေါ့။ ကျွန်တော်တို့မှာ shpare 100 ဆိုရင် object 100 memory ပေါ်မှာ နေရာယူသွားပါလိမ့်မယ်။ screen ကို clear လုပ်ပြီး နောက်ထပ် shape 100 ထပ်ဆွဲမယ်။ ကျွန်တော်တို့ဟာ memory manage မလုပ်ခဲ့ရင် အသစ် shape 100 လည်းပြီးရော object 200 memory ပေါ်မှာ နေရာယူထားပြီလေ။ အဲလိုမျိုးတွေ လုပ်နေရင် ကြာလာတဲ့အခါမှာ memory တွေ အရမ်းစားပါလိမ့်မယ်။

ကဲ… ကျွန်တော်တို့ reference counting နဲ့ စဉ်းစားကြည့်ရအောင်။ create new object လုပ်လိုက်တိုင်း memory ပေါ်မှာ နေရာယူသွားတယ်။ object က count 1 ဖြစ်သွားပြီ။ နောက်ထပ် object ဆောက်ရင် retain count က 2 ဖြစ်သွားပြီ။ တကယ်လို့ release ပြန်လုပ်လိုက်ရင် retain count က decrease ဖြစ်ပြီး 1 ဖြစ်သွားပါလိမ့်မယ်။ ထပ်ပြီး decrease လုပ်လိုက်ရင် 0 ဖြစ်သွားမယ်။ zero ဆိုရင် ထိန်းမထားတော့ပဲ memory ပေါ်မှာ free ဖြစ်သွားပါပြီ။

Syntax

ကျွန်တော်တို့ ပထမဆုံး object တစ်ခုကို တည်ဆောက်ပါမယ်။ object တစ်ခုကို အောက်ကလို တည်ဆောက်ပါမယ်။

myCarClass *car = [myCarClass alloc];

ကျွန်တော်တို့ object ဆောက်ပြီးသွားရင် manual release သို့မဟုတ် autorelease ကို နောက်ပိုင်းမှာ လုပ်ပါမယ်။ သတိထားဖို့က object ကို manual release လုပ်ပြီးမှ autorelease ကို သွားခိုင်းလိုက်ရင် application က crash ဖြစ်သွားနိုင်ပါတယ်။

ကျွန်တော်တို့ oject ကို alloc နဲ့ တည်ဆောက်ပြီးပါပြီ။ အဲဒါတော့ reatin လုပ်ပါမယ်။ object က ဆောက်လိုက်တော့ object count က 1 ဖြစ်သွားပါပြီ။

[car reatin];

ထပ်ပြီး reatin လုပ်လိုက်တော့ count က 2 ဖြစ်သွားပါတယ်။ ဒါကြောင့် ကျွန်တော်တို့ ၂ ကြိမ် release လုပ်ပေးဖို့လိုပါတယ်။

Autorelease and Autorelease Pool’s

XCode မှာ create project တစ်ခုဆောက်တဲ့အခါမှာ အချို့ code တွေက autorelease အတွက် ရေးထားတာကို သတိပြုမိမှာပါ။ code က အောက်ကလို မျိုး ပုံစံလေးပေါ့

NSAutoreleasePool * pool =[[NSAutoreleasePool alloc] init];
[pool drain];

Note: documentation အဟောင်းတွေမှာတော့ နောက်ဆုံး လိုင်းက drain အစား release ဖြစ်နေမှာပါ။ တကယ်တန်းတော့ အတူတူပါပဲ။ drain ပဲ သုံးသုံး release ပဲ သုံးသုံးအဆင်ပြေပါတယ်။

အပေါ်က code က autorelease အတွက်အလုပ်လုပ်ထားတာပါ။ ကျွန်တော်တို့တွေက object ကို autorelase message ပို့ထားလိုက်ပါတယ်။ drain message ကို sent လိုက်တဲ့အခါမှာတော့ object က release လုပ်သွားပါတယ်။ autorelease က အသုံးဝင်ပါတယ်။ pool စဆောက်တဲ့အချိန်ကနေ drain မလုပ်ခင်ထိ သုံးထားတဲ့ object တွေကို drain လုပ်တဲ့အချိန်မှာ အကုန် release လုပ်လိုက်ပါတယ်။ ကျွန်တော်တို့တွေ object ကို reatin count လုပ်ပေးနေစရာမလိုတော့ပဲ relase လွယ်လွယ်ကူကူ လုပ်ပေးလိုက်လို့ရပါတယ်။

Nested Autorelease Pool’s

nested autorelease pool နဲ့ ပတ်သက်ပြီးတော့ အကြမ်းရှင်းပြပေးလို့ရပါတယ်။ အဲဒါကို ဘာကြောင့်သုံးရတာလဲ။ တစ်ခါတစ်လေ loop ပတ်နေတဲ့အချိန်မှာ tempoary object ကို ဆောက်တဲ့ အခါလေးတွေ ရှိပါတယ်။

ဥပမာ။။ loop လုပ်နေတဲ့အခါမှာ temporary object ၂ ခု ဆောက်လိုက်ပါတယ်။ မလိုချင်တဲ့အခါမှာ အဲဒါကို autorelease ပြန်လုပ်ဖို့လိုပါတယ်။ အောက်က code လေးကို လေ့လာကြည့်လိုက်ပါ။

void main()
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

NSArray *args = [[NSProcessInfo processInfo] arguments];

for (NSString *fileName in args) {

NSAutoreleasePool *loopPool = [[NSAutoreleasePool alloc] init];

NSError *error = nil;
NSString *fileContents = [[[NSString alloc] initWithContentsOfFile:fileName
encoding:NSUTF8StringEncoding error:&error] autorelease];

/* Process the string, creating and autoreleasing more objects. */

[loopPool drain];
}

/* Do whatever cleanup is needed. */
[pool drain];

exit (EXIT_SUCCESS);
}

အဲဒီ code လေးက တော်တော်ကောင်းပါတယ်။ အဲဒီမှာ ကျွန်တော်တို့အနေနဲ့ pool တစ်ခုကို စဆောက်လိုက်တယ်။ ပြီးတော့ loop ထဲဝင်တယ်။ Loop ထဲမှာ pool ကို ထပ်ဆောက်တယ်။ အဲဒီ အချိန်မှာပဲ object ၂ ခု ထပ်ဆောက်တယ်။ ပြီးတော့ loopPool ကို drain လုပ်လိုက်တယ်။ ဒါကြောင့် pool စဆောက်တဲ့အချိန်ကနေပြီး drain လုပ်တဲ့ကြားက object တွေကို autorelease လုပ်သွားပေးပါလိမ့်မယ်။ object တွေ create လုပ်ခဲ့တဲ့အတွက် စိုးရိမ်စရာမရှိတော့ဘူးပေါ့။ နောက်ဆုံး program ပြီးသွားတော့ drain ထပ်လုပ်လိုက်တယ်။ ရှိနေတဲ့ object တွေကို အကုန် clear လုပ်သွားပေးတယ်။

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

retainCount

အပေါ်မှာတုန်းကတော့ reatin နဲ့ပတ်သက်ပြီးပြောထားပြီးပါပြီ။ reatin ဘယ်နှစ်ခုရှိလဲ သိဖို့အတွက် reatinCount ကို အသုံးပြုနိုင်ပါတယ်။

NSLog(@"retainCount for car: %d", [car retainCount]);

retainCount က integer ဖြစ်တဲ့အတွက်ကြောင့် %d ကို သုံးထားပါတယ်။

Wrapping Up

Memory management က new programmer တွေအတွက် အနည်းငယ် နားလည်ရခက်ခဲနိုင်ပါတယ်။ အထူးသဖြင့် script langauge က လာတဲ့ programmer တွေအတွက်လည်း ခေါင်းရှုပ်စေနိုင်ပါတယ်။ ဒါပေမယ့် Objective-C မှာက memory management ကို ကိုယ်ပိုင် စိတ်ကျ ဖန်တီးနိုင်တဲ့အတွက်ကြောင့် program ပေါ့ပါးမှုက programmer ရဲ့ object တည်ဆောက်မှုနဲ့ release လုပ်မှုပေါ်မှာ မူတည်နေပါတယ်။ နားမလည်တာတွေကို မေးနိုင်ပါတယ်။

Next Time

နောက်တစ်ပိုင်းမှာတော့ Objectiv-C နဲ့ ပတ်သက်ပြီး ရိုးရှင်းတဲ့ code တွေအကြောင်းရေးသားသွားပါအုံးမယ်။

reference: http://mobile.tutsplus.com/tutorials/iphone/learn-objective-c-day-5/

Learn Objective-C Day 4

ပြီးခဲ့တဲ့ အပိုင်းတွေကတော့ အခြေခံလေးတွေကို ပြန်နွှေးပြီးပါပြီ။ ပြီးခဲ့တဲ့ အပိုင်း တွေကတော့

ကဲ .. အခု Day 4 လေး စလိုက်ရအောင်

Getting Started

အရင်ဆုံး Xcode ကို ဖွင့်လိုက်ပါ။ MacOSX အောက်က Applications ကို ရွေးပြီး Command Line Tool ကို click လုပ်လိုက်ပါ။ Type ကို Foundation လို့ ရွေးလိုက်ပါ။ File name ကို အဆင်ပြေတာပေးပါလိုက်ပါ။ ကျွန်တော်ကတော့ CarApp လို့နာမည်ပေးလိုက်တယ်။ ပြီးရင် ကျွန်တော်တို့တွေ New Class ဆောက်ဖို့လိုပါတယ်။ Command-N သို့မဟုတ် File > New File ကို သွားပါ။ Coca Class အောက်က Objective-C Class ကို ရွေးပါ။ subclass ကတော့ NSObjective ပဲ။ Next လုပ်ပြီးနောက် SimpleCar.m ဆိုပြီး နာမည်ပေးလိုက်ပါ။ ပြီးရင် Finish လုပ်လိုက်ပါ။

Coding the Interface

SimpleCar.h ကို ဖွင့်လိုက်ရင် အောက်ကလို မြင်ရပါလိမ့်မယ်။

#import <Cocoa/Cocoa.h>

@interface SimpleCar : NSObject {

}

@end

ဆိုတဲ့ file လေး ရလာပါမယ်။ Cocoa.h ကြောင့် ကျွန်တော်တို့တွေ NSString, NSMutableString စတာတွေ အသုံးပြုလို့ရလာပါတယ်။ ဟုတ်ပြီ။ Car နဲ့ ပတ်သက်တဲ့ Attribute တွေ ကျွန်တော်တို့တွေ ထည့်ရအောင်။ ဘာတွေလည်းဆိုတော့

  • Make
  • Model
  • VIN

စတာတွေပေါ့။ တခြား Properties တွေ ရှိပေမယ့် အခုတော့ ဒီလောက်ပဲ ထည့်ထားပါမယ်။ အဲဒါကို Cocoa မှာ ဒီလို ရေးလိုက်ပါတယ်။

@interface SimpleCar : NSObject {

NSString* make;

NSString* model;

NSNumber* vin;

}

@end

ကျွန်တော် တို့တွေ ပြီးခဲ့တဲ့ နေ့တုန်းကပြောခဲ့ဘူးပါတယ်။ Data တွေကို ဖတ်ဖို့ ရေးဖို့အတွက် function တွေ လိုအပ်ပါတယ်။ ဒီတော့ ကျွန်တော်တို့ method တွေ ထည့်ပါမယ်။

@interface SimpleCar : NSObject {

NSString* make;

NSString* model;

NSNumber* vin;

}

// set methods

- (void) setVin: (NSNumber*)newVin;

- (void) setMake: (NSString*)newMake;

- (void) setModel: (NSString*)setModel;

// convenience method

- (void) setMake: (NSString*)newMake

andModel: (NSString*)newModel;

@end

ဒါတွေကတော့ ကျွန်တော် Class ရဲ့ SET mthod ပေါ့။ နောက်ပြီးတော့ Parameter ၂ ခုနဲ့ function တစ်ခု ပါထည့်သွင်းထားပါတယ်။ Data Type တွေ တူညီအောင် ကျွန်တော်တို့တွေ ထည့်ပေးဖို့လိုပါတယ်။ ဥပမာ။။ vin က NSNumber ဖြစ်တဲ့အတွက်ကြောင့် setVin ကိုလည်း NSSNumber paramter ပို့ထားတာပေါ့။ နောက်ပြီးတော့ method တွေကို @end မတိုင်ခင်နဲ့ } အဆုံးမှာ ရေးရတာကို သတိထားစေချင်ပါတယ်။ ဟုတ်ပြီ။ Set Method တော့ ပြီးပြီ။ Get method ရေးရအောင်။

// set methods

- (void) setVin: (NSNumber*)newVin;

- (void) setMake: (NSString*)newMake;

- (void) setModel: (NSString*)newModel;

// convenience method

- (void) setMake: (NSString*)newMake

andModel: (NSString*)newModel;

// get methods

- (NSString*) make;

- (NSString*) model;

- (NSNumber*) vin;

return ပြန်စရာလိုတဲ့အခါမှာတော့ ကျွန်တော်တို့တွေ (void) ကို သုံးလို့မရတော့ပါဘူး။ Return ပြန်မယ့် data type ကို ထည့်သွင်းပေးဖို့လိုပါတယ်။

Coding the Implementation

အခု ကျွန်တော်တို့တွေ SimpleCar.h မှာ ပါမယ့် variable တွေ mehtod တွေ ရေးပြီးပါပြီ။ SimpleCar.m မှာ ကျွန်တော်တို့တွေ စပြီး Implement လုပ်ဖို့ လိုလာပါပြီ။ အပေါ်က method တွေမှာ ပါတဲ့ အတိုင်း function တွေကို အောက်ကလို ချရေးလိုက်ပါတယ်။

#import "SimpleCar.h"

@implementation SimpleCar

// set methods

- (void) setVin: (NSNumber*)newVin{

}

- (void) setMake: (NSString*)newMake{

}

- (void) setModel: (NSString*)newModel{

}

// convenience method

- (void) setMake: (NSString*)newMake

andModel: (NSString*)newModel{

}

// get methods

- (NSString*) make{

}

- (NSString*) model{

}

- (NSNumber*) vin{

}

@end

make , model , vin အတွက်ကတော့ return ပြန်ဖို့ပဲ လိုတဲ့အတွက် ဒီလို ထပ်ပြီး ရေးလိုက်တယ်။

- (NSString*) make {

return make;

}

- (NSString*) model {

return model;

}

- (NSNumber*) vin {

return vin;

}

ဒီမှာ တချက် သတိထားဖို့က ကျွန်တော် variable ကို return ပြန်လိုက်တာပါ။ Method Name က သပ်သပ် variable name က သပ်သပ်ပါ။ method name အတိုင်း return ပြန်တာ မဟုတ်ပါဘူး။ variable name အတိုင်း method name ကို လိုက်ရေးရတာ မဟုတ်ပါဘူး။

ကဲ.. ရှေ့ဆက်ရအောင်။ ကျွန်တော်တို့တွေ အခြား set method ကို implement လုပ်ဖို့ လိုပါပြီ။

// set methods

- (void) setVin: (NSNumber*)newVin {

[vin release];

vin = [[NSNumber alloc] init];

vin = newVin;

}

- (void) setMake: (NSString*)newMake {

[make release];

make = [[NSString alloc] initWithString:newMake];

}

- (void) setModel: (NSString*)newModel {

[model release];

model = [[NSString alloc] initWithString:newModel];

}

// convenience method

- (void) setMake: (NSString*)newMake

andModel: (NSString*)newModel {

// Reuse our methods from earlier

[self setMake:newMake];

[self setModel:newModel];

}

ဒီ code ကို ကြည့်ရင် ရှုပ်ထွေးသွားပါလိမ့်မယ်။ အခြား Language တွေနဲ့ မတူတာက NSStirng တို့ NSNumber တို့ကို clear လုပ်ချင်တဲ့အခါမှာ release ဆိုတာလေးကို သုံးရပါတယ်။ နောက်ပြီးတော့ alloc နဲ့ init လုပ်ပေးဖို့လိုပါတယ်။ အခြား Language တွေနဲ့ မတူညီတဲ့ အချက်တွေကြောင့် ခေါင်းနည်းနည်း ရှုပ်ရတတ်ပါတယ်။ code တွေ ရေးပြီးရင်တော့ memory ပေါ်ကနေ ပြန်ရှင်းဖို့လိုပါတယ်။ program ကို ပိတ်တဲ့အခါမှာ memory ပေါ်ကနေ အကုန် ရှင်းချခဲ့ပေးရပါမယ်။

-(void) dealloc

{

[vin release];

[make release];

[model release];

[super dealloc];

}

ဆိုတာလေးကို ထပ်ဖြည့်လိုက်ပါတယ်။

ကဲ.. အခုတော့ Implementation အဆင့်တော့ ပြီးသွားပါပြီ။ နောက်တဆင့် Testing ပေါ့။

Testing the Class

ကဲ… အခု Test အဆင့်ကို ရောက်လာပါပြီ။ ကျွန်တော်တို့ ရေးထားတာတွေ မှန်မမှန် စမ်းရအောင်ဗျာ။

CarApp.m ကို ဖွင့်လိုက်ပါ။

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[]) {

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

// insert code here…

NSLog(@”Hello, World!”);

[pool drain];

return 0;

}[/objc]

အဲလို မျိုး ရေးထားတာလေးကို တွေ့မှာပါ။ အဲလိုရေးထားတာလေးကို အောက်ကလို ပြင်ကြည့်ရအောင်။

#import &lt;Foundation/Foundation.h&gt;

#import "SimpleCar.h"

int main (int argc, const char * argv[]) {

NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

SimpleCar *myCar = [[SimpleCar alloc] init];

NSNumber *newVin = [NSNumber numberWithInt:123];

[myCar setVin:newVin];

[myCar setMake:@"Honda" andModel:@"Civic"];

NSLog(@"The car is: %@ %@", [myCar make], [myCar model]);

NSLog(@"The vin is: %@", [myCar vin]);

[myCar release];

[pool drain];

return 0;

}

အဲလိုလေး ရေးပြီးတဲ့အခါမှာတော့ Build and Run ကို နှိပ်လိုက်ပါ။ ဘာမှ မမြင်ရရင် Run > Console ကို နှိပ်လိုက်ပါ။ Console Log မှာ The car is: Honda Civic , The car is: 123 ဆိုပြီး ပေါ်လာတာကို တွေ့ရပါလိမ့်မယ်။

Property and Synthesize

ကဲ .. ကျွန်တော်တို့တွေ အဆင်ပြေပြေနဲ့ code တော့ ရေးပြီးသွားပြီ။ Objective-C နဲ့လည်း Class ဆောက်လို့ရသွားပြီ။ ဒါပေမယ့် code တွေက ရှည်နေတယ်။ အဲဒီအတွက် @property နဲ့ @synthesize ကို သုံးပြီး ချုံလို့ရပါတယ်။

ကျွန်တော်တို့တွေ ပြီးခဲ့ SimpleCar.h ကို အောက်ကလို ပြောင်းလိုက်ပါမယ်။

@interface SimpleCar : NSObject {

NSString* make;

NSString* model;

NSNumber* vin;

}

@property(readwrite, retain) NSString* make;

@property(readwrite, retain) NSString* model;

@property(readwrite, retain) NSNumber* vin;

// convenience method

- (void) setMake: (NSString*)newMake

andModel: (NSString*)newModel;

@end 

အများကြီးကို တိုသွားပါတယ်။ setMake နဲ့ vin method ၂ ခုကို ပေါင်းပြီး ရေးလိုက်တာပေါ့။ @property က Interface မှာ ကြေငြာထားတာတွေကို ပြန်ထည့်ထားတာပါ။ readwrite လုပ်မယ်လို့ ဆိုလိုတာပေါ့။ အဲလိုပြင်လိုက်တော့ SimpleCar.m ကို လည်းပြင်ဖို့လိုလာပါပြီ။ အဲဒီတော့ ဒီလို ပြင်လိုက်ပါတယ်။

#import "SimpleCar.h"

@implementation SimpleCar

@synthesize make, model, vin;

- (void) setMake: (NSString*)newMake

andModel: (NSString*)newModel {

[self setMake:newMake];

[self setModel:newModel];

}

@end

SimpleCar.h မှာ ကြေငြာထားတာတဲ့ Properties ကို အလုပ်လုပ်ဖို့အတွက် @synthesize နဲ့ variable တွေ ကြေငြာလိုက်ပါတယ်။ ဒါကြောင့် setMake, setModel စတာတွေကို သုံးလို့ရတာပေါ့။

အခုဆိုရင်တော့ Objective-C အကြောင်း အနည်းငယ်တော့ သိလာပြီလို့ထင်ပါတယ်။ နောက်နေ့တွေမှာ ဒီထက် ပိုပြီး ပျော်စရာကောင်းတဲ့ code တွေနဲ့ ရှေ့ဆက်သွားပါအုံးမယ်ဗျာ။

reference: http://mobile.tutsplus.com/tutorials/iphone/learn-objective-c-day-4/

Learn Objective-C: Day 2

Day 2 ကို မစခင် အရင်တုန်းက ရေးခဲ့တဲ့ Day 1 လေးကို ပြန်ညွှန်းလိုက်ပါတယ်။

Object Orientated Programming

ကျွန်တော်တို့ ဘာလို့ Objective C ကို သုံးရတာလဲ။ ဘာဖြစ်လို့ C language ကို မသုံးရတာလဲ။ ဘာလို့လည်းဆိုတော့ Objective C ဟာ Object Orientated Programming ဖြစ်ပြီး Application တွေကို တည်ဆောက်ရမှာ လွယ်ကူစေပါတယ်။ OOP ဆိုတာကတော့ programming paradigm တစ်ခုပါ။ သူက Software တစ်ခုကို တည်ဆောက်တဲ့အခါမှာ object တွေ attribute တွေ နောက်ပြီး function တွေ ပါဝင်လာပါတယ်။ OOP မှာ data abstraction, encapsulation, modularity, polymorphism, နဲ့ inheritance တွေ ပါဝင်ပါတယ်။ OOP အကြောင်းပြောရရင် စာအုပ် တစ်အုပ်စာ ဖြစ်သွားပါလိမ့်မယ်။ ဒါကြောင့် စာပြန်နွှေးတဲ့အနေနဲ့ ဒီနေ့မှာတော့ အခြေခံလေးတွေ ပြောသွားပါမယ်။

စဉ်းစားကြည့်လိုက်ပါ။ သင့်မှာ ကား တစ်စီးရှိတယ်။ အဲဒီ ကား ကို object လို့ သတ်မှတ်လို့ရပါတယ်။ ကမ္ဘာပေါ်မှာ ကားတွေ အများကြီးရှိပါတယ်။ ဒါကြောင့် ကားတွေမှာ properties တွေ ရှိလာတယ်။ model , color , engine type စသည်ဖြင့် အများကြီးရှိပါတယ်။ OOP အရဆိုရင် car က abstract class ဖြစ်ပြီး အဲဒီ class ပေါ်မှာ အခြေခံပြီး အခြား car တွေကို ဖန်တီးလို့ရပါတယ်။ car အသစ်တစ်ခုမှာ မူရင်း ကားမှာ သတ်မှတ်ထားတာတွေ အပြင် အခြား properties တွေ ပါလာနိုင်ပါသေးတယ်။

ဟုတ်ပြီ။ ဒါဆိုရင် ဘာကို object လို့ ခေါ်တာလဲ။ အရာတော်တော်များများဟာ Object တွေလို့ သတ်မှတ်လို့ရပါတယ်။ ဥပမာ လူဟာလည်း Object တစ်ခုလို့သတ်မှတ်ရင်လည်း ရပါတယ်။ Object တစ်ခု ထဲမှာ Properties တွေ function တွေ ပါဝင်လာပါတယ်။ လူဟာ လက် ၂ ဖက် ခြေ ၂ ချောင်း properties တွေ ပါဝင်ပြီး လက်တွေ ခြေတွေ ကို ခိုင်းစေဖို့ function တွေ ပါဝင်ပါတယ်။ ဒီလောက်ဆို နည်းနည်း ရှင်းမယ်ထင်တယ်။ OOP သင်ခဲ့တဲ့သူတွေကတော့ လွယ်လွယ် ကူကူ နားလည်နိုင်ပါလိမ့်မယ်။

Class ဆိုတာကလည်း Object ကိုခေါ်တာပါပဲ။ Object က class ကနေ ဖန်တီးထားတာပါ။a နောက်ပိုင်းမှာ တဖြည်းဖြည်းနဲ့ နားလည်ပါလိမ့်မယ်။ အခုထိ ဘာမှ မမြင်ရသေးတော့ နည်းနည်း စိမ်းနေသေးတာမို့ OOP ကို သိခါစကလူတွေ အတွက် ခေါင်း ရှုပ်ကောင်း ရှုပ်ပါလိမ့်မယ်။

Method

ဟုတ်ပြီ။ car ဆိုတဲ့ Object ရှိတယ်။ car မှာ ဆီဖြည့်တာရှိမယ်။ မောင်းတာ ရှိမယ်။ ကွေ့တာရှိမယ်။ နောက်ဆုတ်တာ ရှိမယ်။ ဒါသူ့ရဲ့ Method တွေပေါ့။ Objective C မှာ method ကို ခေါ်ရင် အောက်ကလို ခေါ်ပါတယ်။

[recipient message];

ဒါဆိုရင် car ဆိုတဲ့ object မှာ gas ဖြည့်တာ ဆိုရင် အောက်ကလို ခေါ်ပါလိမ့်မယ်။

[dansCar addGas];

ဒါက Objective C မှာ ခေါ်တဲ့ ပုံစံ ပါ။ Programming Langauge တော်တော်များများကတော့ အောက်ကလို ခေါ်ကြတာ များပါတယ်။

dansCar.addGas();

Objective C ဟာ အခြား programming language တွေနဲ့ ရေးသားတဲ့ syntax က နည်းနည်းလေး ကွဲပြားတဲ့အတွက် Objective C ကို မလေ့လာပဲ iPhone Development ကို ကူးတဲ့အခါမှာ syntax တွေကြောင့် စိတ်အနှောင့်အယှက် ဖြစ်ရတတ်ပါတယ်။

Attributes

gas ကတော့ ဖြည့်ပြီးသွားပြီ။ gas tank ထဲမှာ gas ဘယ်လောက်ရှိလဲသိရဖို့အတွက် လိုလာပါပြီ။ gas tank ထဲမှာ gas 50% ရှိတာလား။ 100% ရှိတာလား ဆိုတာကို သိဖို့လိုပါတယ်။ အဲဒီအတွက် attribute variable လိုလာပါပြီ။ Attribute ဆိုတာကတော့ ဒီ class အတွက် သီးသန့် variable ပေါ့ဗျာ။ OOP နားလည်ပြီးသားသူတွေအနေနဲ့တော့ ပြောလိုက်တာနဲ့ သဘောပေါက်မယ်ထင်ပါတယ်။ OOP အားနည်းတဲ့သူတွေ နားမလည်ရင်လည်း comment မှာ မေးလို့ရပါတယ်။ အားမငယ်ပါနဲ့။ Objective C လုပ်ရင်း OOP ကို နားလည်သွားပါလိမ့်မယ်။

Interface and Implementation

Objective C မှာ အဓိက အားဖြင့် file 2 file ပါဝင်ပါတယ်။ .m နဲ့ .h file ပါ။ Interface ကို .h နဲ့ သိမ်းပြီး implementation ကိုတော့ .m နဲ့ ရေးပါတယ်။

Interface

#import <Cocoa/Cocoa.h>

@interface Car : NSObject {

//This is where attributes go
float fillLevel;

}

//This is where methods go
- (void)addGas;

@end

အဲဒါက Interface တစ်ခု ဖန်တီးထားတာပါ။ ဒါက Objective-C ရဲ့ .h file အခြေခံပေါ့။ ဒီ ဥပမာ က syntax သဘောတရားပဲ ပြထားတဲ့အတွက် run လို့ရမှာမဟုတ်ပါဘူး။ Car ကို Interface တစ်ခု အနေနဲ့ တည်ဆောက်လိုက်တယ်။ NSObject ကတော့ Car class က NSObject ကို inherits လုပ်ထားတယ်ကို ပြောတာပါ။ Attribute အနေနဲ့ Float value fillLevel ပါပါတယ်။ နောက်ပြီး function အနေနဲ့ addGas ဆိုတာ ပါပါတယ်။ (void) ဆိုတာကတော့ return value မရှိဘူးလို့ ဆိုလိုတာပါ။ C နဲ့ ဆင်ပေမယ့် syntax လေးတွေက နည်းနည်း ကွာပါတယ်။

Implementation

#import "Car.h"

@implementation Car

-(void) addGas {
// code goes here to add gas
}

@end

ဒါကတော့ Implementation ပိုင်းဖြစ်တဲ့ .m အပိုင်းပေါ့။ interface မှာ ပြောထားတဲ့ function ကို implementation လုပ်ပါတယ်။ နောက်ပြီး interface မှာ ကြေငြာထားတဲ့ attribute ကို ခေါ်ယူပြီး အသုံးပြုလို့ရပါတယ်။ addGas ကနေ gas ဖြည့်တဲ့ function ကို ရေးသားရပါမယ်။

ကဲ.. ဒီနေ့တော့ ဒီလောက်ပါပဲ။ အခုဆိုရင် Objective C အကြောင်း အနည်းငယ် သိသွားလောက်ပါပြီ။ နောက်နေ့တွေမှာ Objective C အကြောင်းကို ဆက်သွားပါမယ်။ အခုတော့ အခြေခံ သဘောတရားလေးတွေ နွှေးပြီးပြီမို့ Objective C အပိုင်းကိုပဲ ဆက်သွားပါတော့မယ်။

reference : http://mobile.tutsplus.com/tutorials/iphone/learn-objective-c-2/

Learn Objective C : Day 1

Objective C series ထဲမှာ အခြား အပိုင်းများ

Objective C ဆိုတာ ဘာလဲ။

Objective C ဆိုတာကတော့ Objective Oriented Language တစ်ခုဖြစ်ပြီး C Language ပေါ်မှာ အခြေခံထားခြင်းဖြစ်ပါတယ်။ သူဟာလက်ရှိ Mac OS X နဲ့ iOS အတွက် အဓိက programming language တစ်ခုပါပဲ။ အရင်တုန်းကတော့ NeXTSTEP OS ရဲ့ အဓိက language တစ်ခုပါ။ အဲဒီ OS ကို apple က ဝယ်ပြီး OS X ကို ထုတ်လုပ်ခဲ့ပါတယ်။

Objective C ဟာ C ကို အခြေခံထားပြီး C ကိုလည်း run နိုင်ပါတယ်။ Objective C ဟာ C ပါ run နိုင်တာကြောင့် C လုပ်နိုင်သမျှ အကုန်လုံးကို Objective C က လုပ်နိုင်ပါတယ်။

ဘာတွေ လိုအပ်သလဲ။

အခု ကျွန်တော်တို့ iPhone Development မလုပ်သေးခင် Objective C အကြောင်းကို သိထားဖို့လိုပါတယ်။ Objective C ကို စမ်းဖို့အတွက် XCode ကို သွင်းတဲ့အခါမှာ Mac OSX SDK ကိုပါသွင်းခဲ့ဖို့ လိုပါလိမ့်မယ်။ iPhone SDK ကို သွင်းတဲ့အခါမှာ XCode , Interface Builder အပြင် အခြား Application တွေပါပါဝင်ပါတယ်။ ထို့အတူ gcc ကိုလည်း အလိုအလျောက်သွင်းသွားပါလိမ့်မယ်။

Objective C ကို လေ့လာတဲ့ အခါမှာ C ကို အခြေခံသိထားတဲ့ သူတွေဆိုရင် ပိုကောင်းပါလိမ့်မယ်။ C programming language က programmer တော်တော်များများရဲ့ ပထမဆုံး အခြေခံ language ဆိုလည်း မများပါဘူး။ တကယ်လို့ C ကို မလေ့လခဲ့လည်း ကိစ္စတော့ သိပ်မရှိပါဘူး။ Programming ကို တတ်ကျွမ်းထားရင် လေ့လာနိုင်ပါလိမ့်မယ်။

iPhone Development လုပ်ဖို့အတွက် Mac OSX လိုအပ်ပါတယ်။ Intel CPU Mac တွေ လိုအပ်ပါတယ်။ ဒါကြောင့် Mac user မဟုတ်တဲ့သူတွေအတွက် Objetive C ကို လေ့လာလို့ ရမှာမဟုတ်ပါဘူး။ နောက်ပြီးတော့ Objective C ကို အဓိက ထားမှာ ဖြစ်တဲ့အတွက်ကြောင့် iPhone Development ကို ချက်ခြင်း ကူးမှာ မဟုတ်ပါဘူး။ Objective C အခြေခံမရှိပဲ iPhone Development ပိုင်းကို ကူးတဲ့အခါမှာ ပြဿနာတွေ ကြံုတတ်ပါတယ်။

Compile လုပ်ခြင်း

GCC က ကျွန်တော်တို့ စက်တွေထဲမှာ ရှိနေပြီးသား ဖြစ်တဲ့အတွက် သီးသန့် သွင်းနေစရာ မလိုတော့ပါဘူး။ တစ်ခါတည်း code တွေကို compile လုပ်လို့ရပါတယ်။ အခု အပိုင်းမှာတော့ C ကိုပဲ Mac မှာ ဘယ်လို compile လုပ်သလဲဆိုတာလေးကို အခြေခံအနေနဲ့ ရေးသားမှာပါ။ Application -&gt; Terminal ကို ဖွင့်ပြီး Terminal ကနေ ကျွန်တော်တို့ gcc ကို compile လုပ်ရပါတယ်။

[lang name=shell]$gcc inputfile.m -o outputfile[/c]

အဲလို မျိုး compile လုပ်ပြီးသား program ကို run ဖို့အတွက်ကတော့

[lang name=shell]$./outputfile[/c]

ဆိုပြီး run လိုက်လို့ရပါတယ်။

The Basics

ကဲ … ကျွန်တော်တို့တွေ ဥပမာလေး တစ်ခုလောက် စမ်းရအောင်။ Desktop ပေါ်မှာ Test ဆိုတဲ့ Folder လေး ဆောက်လိုက်ပါ။ Texteditor မှာ C code ကို အောက်ပါ အတိုင်း ရိုက်နိုင်ပါတယ်။

#include &lt;stdio.h&gt;
int main(){
printf("Hello World\n");
return 0;
}

ပြီးတဲ့ အခါမှာ Test ဆိုတဲ့ Folder ထဲမှာ program1.m နာမည်နဲ့ သိမ်းလိုက်ပါ။ Terminal ကို ဖွင့်ပြီး

$cd ~/Desktop/Test
$gcc program1.m -o program1
$./program1

အဲဒါဆို compile လုပ်ပြီးသား program ကို run လိုက်တဲ့အခါမှာတော့ Hello World ဆိုတဲ့ စာလေးထွက်လာပါလိမ့်မယ်။ code လေးကတော့ ရှင်းရှင်းလေးပါပဲ။ computer တက္ကသိုလ် first year ပြီးထားတဲ့သူတိုင်း သိတဲ့ code လေးပါ။ printf နဲ့ ထုတ်ပြီး \n ကတော့ တစ်ကြောင်းဆင်းထားလိုက်တာပါ။

Variable

Variable ကတော့ data တွေကို memory ပေါ်မှာ သိမ်းဖို့အတွက်ပါ။ Variable တွေမှာ variable type တွေ ရှိပါတယ်။ ဒါတွေကတော့ programming အခြေခံတတ်ထားပြီးသားသူတွေအတွက် သိပြီးသားလို့ ထင်ပါတယ်။ variable type တွေကတော့

  • int – integer နံပတ်တွေကို သိမ်းဖို့အတွက်ပါ။
  • char – character တွေကို သိမ်းဖို့အတွက်ပေါ့။
  • float – ဒဿမ ကိန်းတွေအတွက်ပါ။
  • double – ဒဿမ ကိန်းတွေအတွက်ပါပဲ။ ဒါပေမယ့် သူက float ထက် ပိုပြီး အရေအတွက်များပါတယ်။

variable ကို ဘာလို့ အသုံးပြုရသလဲဆိုတော့

1+10 = 11

ဖြစ်ပါမယ်။ အမြဲ ပုံသေ မဟုတ်ချင်တဲ့အခါမှာတော့ variable ကို အသုံးပြုပါတယ်။

1+i= ?

အဲဒါဆိုရင် နံပတ်တွေက အမျိုးမျိုး ဖြစ်နိုင်တယ်ပေါ့။ variable ထဲမှာ ထည့်ထားတဲ့ နံပတ်ပေါ်မှာ အခြေခံပြီးတော့ အဖြေလည်း ပြောင်းသွားပါလိမ့်မယ်။ ဟုတ်ပြီ။ အပေါ်က c code လေး ကို အောက်ကလို နည်းနည်းထပ်ပြောင်းပါမယ်။

#include &lt;stdio.h&gt;
int main(){
int someNumber = 123;
printf("My number is %i \n", someNumber);
return 0;
}

အဲဒါကို run လိုက်ရင် 123 ဆိုပြီး ဖြစ်သွားပါလိမ့်မယ်။ printf ကို သုံးတဲ့အခါမှာ variable ပေါ်မယ့် နေရာတွေကို ဘာ variable ဆိုပြီး data type ပေါ်မူတည်ပြီး text လေးထည့်ပေးရပါတယ်။ အခု ဥပမာမှာ %i ကို ထည့်ထားတာ တွေ့ပါလိမ့်မယ်။ အဲဒါက someNumber က int ဖြစ်နေလို့ပါ။ အခြားဟာတွေအတွက် အောက်မှာ ကြည့်နိုင်ပါတယ်။

  • %i – integer အတွက်
  • %f – float အတွက်
  • %e – double အတွက်
  • %c – char အတွက်

ဒါတွေက အရေးကြီးပါတယ်။ C မှာ သာမဟုတ် နောက်ပိုင်း Objective C ကို ရေးသားရာမှာလည်း အသုံးများလာပါလိမ့်မယ်။ အဲဒီအထဲမှာ character က string အတွက် အသုံးပြုမယ်ဆိုရင် အခန်းတွေ အများကြီးနဲ့ တွဲပြီး အသုံးပြုရပါတယ်။ ဥပမာ။။ Hello World ဆိုတဲ့ စာလုံး ၁၁ လုံး မှာဆိုရင် chr[0] က H ပေါ့။ အဲလိုမျိုး 0 ကနေ စပြီး 10 အထိ အခန်းပုံစံတွေနဲ့ အသုံးပြုရပါတယ်။

Conditionals

လောကမှာ အရာအားလုံးက တဆင့်ပြီး တဆင့်ဖြစ်နေတာ ရှိနေသလို အချို့နေရာတွေမှာကတော့ ဒါဖြစ်ရင်ဒါလုပ် မဖြစ်ခဲ့ရင် ဒါလုပ် ဆိုတဲ့ Conditional တွေ ရှိပါတယ်။ Programming မှာလည်း ရှိပါတယ်။ အဲဒီအခါမှာ programming မှာ if နဲ့ အသုံးပြုပါတယ်။ code ကတော့ အောက်မှာ ဥပမာ ပေးထားပါတယ်။

#include &lt;stdio.h&gt;
int main()
{
if(1 == 1) { // This is always true

// Do some stuff here

}

return 0;
}

1 နဲ့ 1 သာ တူခဲ့ရင် true ဖြစ်ပြီး အောက်က { နဲ့ စပြီး } ပိတ်ထားတဲ့ ကြားက code တွေကို အလုပ်လုပ်မှာပါ။ မဖြစ်ခဲ့ရင် condition အတွက်တော့ else ဆိုတာကို အသုံးပြုနိုင်ပါတယ်။ // နဲ့ ရေးထားတာတွေက comment ပါ။

int main(){

if(1==1){

// Do some stuff here.

}

else{

// The universe is broken!

}

return 0;

}

ကျွန်တော်တို့တွေ အဲဒီ 1==1 ဆိုတဲ့ နေရာတွေမှာ variable တွေထားပြီး စစ်နိုင်ပါတယ်။ i==1 ဖြစ်လားဆိုသလိုမျိုးပေါ့

Loop

ကြိမ်ဖန်များစွာ ထပ်ခါ ထပ်ခါ လုပ်နေရင် Loop လုပ်တယ်လို့ ခေါ်ပါတယ်။ Looping အတွက် ကျွန်တော်တို့တွေ for , while , do တွေကို အသုံးပြုကြပါတယ်။

// if loop

int main () {

int i = 9;

int x = 0;

for (x = 0; x &amp;lt; i; x++){

printf("Count is: %i\n", x);

}

return 0;

}

အဲဒါလေးကတော့ for loop ပေါ့။ x က 0 ကနေ စပြီးတော့ i ထက် ငယ်တဲ့အထိပေါ့။ i က 9 ဖြစ်တဲ့အတွက်ကြောင့် 0 ကနေ 8 အထိ အလုပ်လုပ်ပါမယ်။ အဲဒီတော့ Count is 0 ကနေ Count is 8 ထိကို ဖော်ပြပေးပါလိမ့်မယ်။

// while loop

int main () {

int x = 0;

while (x &lt; 10){

printf("Count is: %i\n", x); //Watch OUT! Something is missing.

}

return 0;

}

ဒါကတော့ while loop ပေါ့။ သူကတော့ variable တစ်ခုထဲပါပဲ။ x ကို 0 လို့ သတ်မှတ်ထားတယ်။ 10 ထက် ငယ်နေသ၍ အလုပ်လုပ်မယ်လို့ ဆိုထားတာပါ။ ဒါပေမယ့် အဲဒီ code ကို run ရင် ပြီးတော့မှာ မဟုတ်ပါဘူး။ ဘာကြောင့်လဲဆိုတော့ x တန်ဖိုး မပြောင်းလဲသွားတဲ့အတွက်ကြောင့်ပါ။ for loop မှာတုန်းက x++ ဆိုပြီး x တန်ဖိုးကို ၁ တိုးတိုး သွားပါတယ်။ while loop မှာလည်း အဲလို တန်ဖိုး တိုးပေးဖို့လိုပါတယ်။ အဲဒါကြောင့် အောက်ကလို နည်းနည်းပြင်လိုက်ပါတယ်။

// while loop
int main () {
int x = 0;
while (x &lt; 10){
x++;
printf("Count is: %i\n", x);
}

return 0;
}

အဲဒီအခါ x ကို ၁ တိုးတိုးသွားတဲ့အတွက် ၁၀ ရောက်တာနဲ့ ၁၀ ထက် မငယ်တော့တာကြောင့် loop က ထွက်သွားပါလိမ့်မယ်။ do loop က လည်း while loop နဲ့ အတူတူပါပဲ။ မတူတာကတော့ condition ကို အောက်မှာ စစ်တာပါပဲ။ while loop က process မစခင် စစ်ပေမယ့် do loop က process ကို အနည်းဆုံး ၁ ခေါက်လုပ်ပြီးမှ condition ကို စစ်ပါတယ်။

// do loop

int main () {

int x = 0;

do {

x++;

printf("Count is: %i\n", x);

} while(x &lt; 10);

return 0;

}

Pointer

pointer က memory ပေါ်က address နံပတ်ကို မှတ်ထားတာပါ။ variable က value ကို မှတ်ပေမယ့် pointer က memory address ကို မှတ်ထားပြီး အဲဒီ memory address ကို value ကို လှမ်းယူတာပေါ့။ ဥပမာ။။ variable value က အမြဲ ပေါင်းနေပေမယ့် variable ရဲ့ address က တစ်ခုတည်းမှာပဲ value တွေ ပြောင်းပြောင်းသွားနေတာပါ။ ဒါကြောင့် address နံပတ်ကို လှမ်းခေါ်လိုက်ရင် variable မှာ ပြောင်းထားတဲ့ value ကို ရနိုင်ပါတယ်။

int foo = 123; // This is an integer variable

int *ptr = &amp;foo; // This is a pointer to an integer variable

ရှုပ်သွားလောက်ပြီထင်တယ်။ နောက်ပိုင်းမှာ Objective-C လေ့လာရင်း pointer အသုံးပြုပုံတွေ တွေ့လာမှာပါ။ အဲဒီ အခါ ထပ်ရှင်းပြတာပေါ့။

အဆုံးသတ်ခြင်း

ဒီနေ့မှာတော့ Objective-C မစခင် C ကို ပြန်နွှေပေးတာပါ။ လွယ်လွယ်လေးနဲ့ ပြန်မှတ်မိအောင်ပေါ့။ အချို့တွေကလည်း C ကို အသုံးမပြုတာကြာပြီဆိုတော့ မေ့သွားလောက်ပြီ။ ဒါကြောင့် Objective-C မစခင် ပြန်ပြီး နွှေးပေးတဲ့ သဘောပါ။ နောက်နေ့မှာ Objective-C အကြောင်း Intro လေး စပါမယ်။

Reference : http://mobile.tutsplus.com/tutorials/iphone/learn-objective-c-day-1/

iPhone Development Intro – 1

iPhone application တစ်ခု ရေးသားဖို့ရာ နည်းလမ်း ၂ ခု ရှိပါတယ်။ HTML5 Web Application နဲ့ iPhone Application တို့ပါပဲ။ HTML5 Web application ဆိုတာက သမာရိုးကျ website ကို iPhone Safari နဲ့ အဆင်ပြေအောင် ပြောင်းလဲရေးသားရတာပါ။ HTML5 ဖြစ်တဲ့အတွက်ကြောင့် Video တွေ Sound တွေ ထည့်သွင်းလာနိုင်ပါတယ်။ အဲဒီလိုမျိုး HTML5 တွေကို စမ်းသပ်ချင်တယ်ဆိုရင်တော့ http://www.apple.com/html5 မှာ လေ့လာနိုင်ပါတယ်။ ပုံမှန် Web Development နဲ့ အတူတူပါပဲ။ ဘာမှ ကွာခြားမှုမရှိပါဘူး။ ထူးခြားတာကတော့ safari webkit css တွေ ခေါ်ယူသုံးစွဲလို့ရတာပါပဲ။

Continue reading “iPhone Development Intro – 1”