gioi thieu ve objective-c(tiếng việt)

Upload: tran-cao-cuong-tran

Post on 16-Oct-2015

67 views

Category:

Documents


0 download

DESCRIPTION

Giới thiệu một cách tổng quát về ngôn ngữ Objective-C, sau đó muốn tìm hiểu sâu các bạn có thể tìm đọc ebook bằng tiếng anh nhé, thân.

TRANSCRIPT

  • 5/26/2018 Gioi Thieu Ve Objective-C(Ti ng Vi t)

    1/28

    L

    !p trnh

    "ng d

    #ng trn iOS

    Objective-C

  • 5/26/2018 Gioi Thieu Ve Objective-C(Ti ng Vi t)

    2/28

    N$i dung Gi!i thi"u v#Objective-C Quy t$c !%t tn l!p, tn ph&'ng th(c, tn bi)n Class trong Objective-C Ph*m vi truy xu+t cc bi)n th,hi"n

    Property trong Objective-C Ph&'ng th(c trong Objective-C Category trong Objective-C Protocol trong Objective-C K)th-a X.l"ngo*i l" M/t s0c+u trc !i#u khi,n trong Objective-C Qu1n l"b/nh! Selector trong Objective-C

  • 5/26/2018 Gioi Thieu Ve Objective-C(Ti ng Vi t)

    3/28

    Gi%i thi&u v'Objective-C

    Ngn ng2l3p trnh h&!ng !0i t&4ng ANSI C + Smalltalk = Objective-C Objective-C l ngn ng2l3p trnh chnh!&4c Apple ch5n !,vi)t cc (ng d6ng

    cho h"!i#u hnh Mac OS, iOS

    --> D7dng n$m b$t !&4c ngn ng2Objective-C n)u c kinh nghi"m v#C

  • 5/26/2018 Gioi Thieu Ve Objective-C(Ti ng Vi t)

    4/28

    Quy t(c )*t tn

    Class B$t !8u b9ng k"t:hoa

    Method B$t !8u b9ng k"t:th&;ng

    Variable

    Gi0ng method

    @interface MyClass : NSObject{}

    @end

    - (void) findMe;

    NSString *stringURL;

    MyClass.h@interface MyClass : NSObject{

    NSString *stringURL;}

    - (void) findMe;

    @end

  • 5/26/2018 Gioi Thieu Ve Objective-C(Ti ng Vi t)

    5/28

    Class trong Objective-C

    @interface: Khai bo class @implementation: #

  • 5/26/2018 Gioi Thieu Ve Objective-C(Ti ng Vi t)

    6/28

    Ph+m vi truy xu,t cc bi-n

    @private: Gi!i h*n ph*m vi trong l!p mbi)n th,hi"n !&4c khai bo

    @protected (default): Gi

    !i h*n ph

    *m vitrong l!p v l!p con k)th-a m bi)n th,

    hi"n !&4c khai bo @public: Khng gi!i h*n ph*m vi truy

    xu+t

  • 5/26/2018 Gioi Thieu Ve Objective-C(Ti ng Vi t)

    7/28

    Ph+m vi truy xu,t cc bi-n (tt)

    V d6:

  • 5/26/2018 Gioi Thieu Ve Objective-C(Ti ng Vi t)

    8/28

    Property trong Objective-C

    Property cho php ! Thu3n l4

    i cho vi"c truy xu

    +t !

    )n ccbi)n th,hi"n

    #

  • 5/26/2018 Gioi Thieu Ve Objective-C(Ti ng Vi t)

    9/28

    Property trong Objective-C (tt)

    Cc thu/c tnh (attributes) readwrite(default): !5c v ghi (get/set) read-only: ch=c th,!5c (get) assign (default): Th&;ng dng v!i cc ki,u

    v h&!ng nh&NSInteger, CGFloat, CGrect, retain: Th&;ng !&4c s.d6ng cho !0i t&4ng copy: T*o m/t b1n sao c>a !0i t&4ng s?!&4c s.d6ng cho !0i t&4ng ch=!

  • 5/26/2018 Gioi Thieu Ve Objective-C(Ti ng Vi t)

    10/28

    Property trong Objective-C (tt)

    Cc thu/c tnh (attributes)-atomic// @property (retain)UITextField *username;

    // Generates roughly- (UITextField *) username{

    UITextField *retval = nil;

    @synchronized(self) {retval = [[username retain] autorelease];

    }returnretval;

    }- (void)setUsername: (UITextField *)_username {@synchronized(self) {

    [_username retain];[username release];

    username = _username;

    }}

  • 5/26/2018 Gioi Thieu Ve Objective-C(Ti ng Vi t)

    11/28

    Property trong Objective-C (tt)

    Cc thu/c tnh (attributes)-nonatomic// @property (retain,nonatomic)UITextField *username;

    // Generates roughly

    - (UITextField *) username{returnusername;

    }- (void)setUsername: (UITextField *)_username {

    [_username retain];[username release];

    username = _username;

    }

  • 5/26/2018 Gioi Thieu Ve Objective-C(Ti ng Vi t)

    12/28

    Ph./ng th"c trong Objective-C

    Class method K"hi"u d+u + Truy xu+t thng qua tn l!p Khng th,truy c3p vo cc bi)n th,hi"n

    (Instance variables) Instance method

    K"hi"u d+u - Truy xu+t thng qua !0i t&4ng

  • 5/26/2018 Gioi Thieu Ve Objective-C(Ti ng Vi t)

    13/28

    Ph./ng th"c trong Objective-C (tt)

    Khai bo ph&'ng th(c:-/+ (return_type) method;-/+ (return_type) methodPara1 : (type) para1;-/+ (return_type) methodPara1 : (type) para1 andPara2: (type) para2;

    G5i ph&'ng th(c:// Class methodMyClass *myClass = [MyClass method];

    // Instance method[object method];[object methodPara1:pa1];[object methodPara1:pa1 andPara2:pa2];

  • 5/26/2018 Gioi Thieu Ve Objective-C(Ti ng Vi t)

    14/28

    Category trong Objective-C

    Khi mu0n thm m/t s0ph&'ng th(c vom/t l!p c sAn MBr/ng l!p ! b9ng cch vi)t l*i m ngu@n MBr/ng l!p ! khng c8n vi)t l*i m ngu@n

    --> CategoryMyClass.h

    @interface MyClass : NSObject{

    }- (void) showMe;

    @end

    MyClass.m@implementation MyClass

    - (void) showMe {// show me

    }@end

  • 5/26/2018 Gioi Thieu Ve Objective-C(Ti ng Vi t)

    15/28

    Category trong Objective-C (tt)

    Thm m/t ph&'ng th(c newMethod chol!p MyClass thng qua CategoryMyClass+MyCategory.h

    @interface MyClass (MyCategory)- (void) newMethod;

    @end

    MyClass+MyCategory.m@implementation MyClass (MyCategory)

    - (void) newMethod {// to do new method

    }@end

    Ch !: - Tn c0a Category l duy nh,t (Khng ".1c trng)

    - Trong Category khng cho php thm cc bi2n th2hi&n

  • 5/26/2018 Gioi Thieu Ve Objective-C(Ti ng Vi t)

    16/28

    Procol trong Objective-C

    Protocol l g ? V d6:

    @protocol MyProtocol// required (default)

    - (void) requiredMethod;

    @optional- (void) anOptionalMethod;

    - (void) anotherOptionalMethod;

    @required

    - (void) anotherRequiredMethod;

    @end

  • 5/26/2018 Gioi Thieu Ve Objective-C(Ti ng Vi t)

    17/28

    K-th3a

    T&'ng t:nh&cc ngn ng2khc Trong Objective-C, root class c>a t+t c1

    cc class l NSObject

    Person.h@interface Person:NSObject {

    NSString*name;NSString*birthday;

    }//

    @end

    Teacher.h@interface Teacher:Person{

    floatfSalary;}

    // @end

    Person

    Teacher

  • 5/26/2018 Gioi Thieu Ve Objective-C(Ti ng Vi t)

    18/28

    X4lngo+i l&

  • 5/26/2018 Gioi Thieu Ve Objective-C(Ti ng Vi t)

    19/28

    M$t s5c,u trc i'u khi2n

    If For

    Switch While

  • 5/26/2018 Gioi Thieu Ve Objective-C(Ti ng Vi t)

    20/28

    Qu6n lb$nh%

    Cc nguyn t$c qu1n l"b/nh! V+n !#khi khBi t*o !0i t&4ng

    Release Retain Dealloc Tham chi)u y)u

  • 5/26/2018 Gioi Thieu Ve Objective-C(Ti ng Vi t)

    21/28

    Qu6n lb$nh% Cc nguyn t$c qu1n l"b/nh! Nguyn t$c c%n b1n

    Khi b*n n$m quy#n sBh2u m/t !0i t&4ng, khBi t*o !0i t&4ng b9ngcc ph&'ng th(c m trong tn b$t !8u v!i v!i alloc ho%c new ho%ccopy (v d6, alloc, newObject ho%c mutableCopy) ho%c g.i m/tthng !i"p retain, b*n ph1i c trch nhi"m gi1i phng quy#n sBh2u!0i t&4ng ! b9ng cch s.d6ng release ho%c autorelease. B+t k&

    khi no b*n nh3n !&4c m/t !0i t&4ng (khng ph1i t:mnh khBi t*o),b*n khng !&4c release n. Nguyn t$c khc

    Khi b*n c8n l&u tr2m/t !0i t&4ng !&4c nh3n nh&m/t propertytrong m/t bi)n th,hi"n, b*n ph1i retain ho%c copy n. (#i#u nykhng !ng cho cho tham kh1o y)u, nh&ng !y l !i,n hnh hi)m).

    M/t !0i t&4ng !&4c nh3n th&;ng !1m b1o vCn c hi"u l:c trongph&'ng th(c m n ! !&4c nh3n (ngo*i tr-trong cc (ng !a lu@ngv vi tr&;ng h4p Distributes Objects). Ph&'ng th(c ! c th,tr1v#an ton !0i t&4ng m n !&4c tri"u g5i. S.d6ng retain trongvi"c k)t h4p v!i release ho%c autorelease khi c8n thi)t !,b1o v"m/t !0i t&4ng khDi hi"u l:c c>a cc thng !i"p khng h4p l"bnngoi.

    autorelease c ngh$a l g.i m/t thng !i"p release sau !

  • 5/26/2018 Gioi Thieu Ve Objective-C(Ti ng Vi t)

    22/28

    Qu6n lb$nh%

    V+n !#khi khBi t*o !0i t&4ngMyClass *myClass = [MyClass alloc];

    [myClass init];if(myClass) {

    //

    }

    ???

  • 5/26/2018 Gioi Thieu Ve Objective-C(Ti ng Vi t)

    23/28

    Qu6n lb$nh%

    V+n !#khi khBi t*o !0i t&4ng (tt)MyClass *myClass = [[MyClass alloc] init];

    if(myClass) {//

    }

    OK

    Ch !: - Lun lun tr6v'niltrong ph./ng th"c initn-u c l7i x6y ra- Ph6i k-t h1p 02 l8i g9i ph./ng th"c allocv init

  • 5/26/2018 Gioi Thieu Ve Objective-C(Ti ng Vi t)

    24/28

    Qu6n lb$nh%

    Release Ch=!&4c releasekhi khBi t*o !0i t&4ng

    m/t cch th>cng alloc KHNG releaseth>cng m/t !0i t&4ng

    autorelease--> CRASH

    // string2 will be released automaticallyNSString*string2 = [NSStringstring];

    // Must release string1 when doneNSString*string1 = [[NSStringalloc] init];

    // [string1 release];

    !"#$%&'&()&

    %&'&()&

  • 5/26/2018 Gioi Thieu Ve Objective-C(Ti ng Vi t)

    25/28

    Qu6n lb$nh%

    Retain MEi !0i t&4ng c m/t b/!)m !&4c s.d6ng !,ki,m

    sot t+t c1cc tham chi)u bBi !0i t&4ng ho%c n c Ph&'ng th(c alloc, new, copy v retain !#u lm t%ngb/!)m ln 1 Ph&'ng th(c release gi1m b/!)m !i 1 Khi b/!)m c gi tr Ph&'ng th(c dealloc

    c>a !0i t&4ng s?!&4c g5i#,xc !

  • 5/26/2018 Gioi Thieu Ve Objective-C(Ti ng Vi t)

    26/28

    Qu6n lb$nh%

    Dealloc#&4c g5i khi !0i t&4ng !ang !&4c remove

    khDi b/nh! N)u m/t l!p c cc bi)n th,hi"n (instance

    variable) l cc !0i t&4ng th trong ph&'ngth(c dealloc c>a l!p ph1i th:c hi"n gi1ii

    phng cc bi)n th

    ,hi"n ny- (void) dealloc {

    [childVar1 release];

    [childVar2 release];//

    [superdealloc];

    }

  • 5/26/2018 Gioi Thieu Ve Objective-C(Ti ng Vi t)

    27/28

    Qu6n lb$nh%

    Tham chi)u y)u T*o tham chi)u !)n !0i t&4ng m khng c1n

    trB!0i t&4ng t:gi1i phng chnh n -->

    Thi)t l3p tham chi)u y)u !)n !0i t&4ng

  • 5/26/2018 Gioi Thieu Ve Objective-C(Ti ng Vi t)

    28/28

    Selector trong Objective-C

    Selector trong Objective-C c 02 "ngh$a: Ch=!)n tn c>a m/t ph&'ng th(c khi n!&4c s.d6ng trong m ngu@n m/t thng!i"p gBi !)n m/t !0i t&4ng

    Ch=!)n m/t !