You are on page 1of 28

L!

p trnh "ng d#ng trn iOS


Objective-C
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 s0 c+u trc !i#u khi,n trong Objective-C
Qu1n l" b/ nh!
Selector trong Objective-C
Gi%i thi&u v' Objective-C
Ngn ng2 l3p trnh h&!ng !0i t&4ng
ANSI C + Smalltalk = Objective-C
Objective-C l ngn ng2 l3p trnh chnh
!&4c Apple ch5n !, vi)t cc (ng d6ng
cho h" !i#u hnh Mac OS, iOS
--> D7 dng n$m b$t !&4c ngn ng2
Objective-C n)u c kinh nghi"m v# C
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
Class trong Objective-C
@interface: Khai bo class
@implementation: #<nh ngh$a class
@end: K)t thc khai bo class ho%c k)t
thc !<nh ngh$a class

// .h
@interface MyClass : NSObject
{
//
}
@end
// .m
@implementation MyClass
//
@end
Ph+m vi truy xu,t cc bi-n
@private: Gi!i h*n ph*m vi trong l!p m
bi)n th, hi"n !&4c khai bo
@protected (default): Gi!i h*n ph*m vi
trong 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
Ph+m vi truy xu,t cc bi-n (tt)
V d6:
Property trong Objective-C
Property cho php !<nh ngh$a cc b/
truy xu+t (setter/getter)
--> Thu3n l4i cho vi"c truy xu+t !)n cc
bi)n th, hi"n
#<nh ngh$a trong file .h
@property (<attributes>) type propertyName;
Th:c thi trong file .m
@synthesize propertyName;
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= !<nh
atomic (default): Th:c hi"n !@ng b/ ho
nonatomic: Ng&4c v!i atomic
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];
}
return retval;
}
- (void) setUsername : (UITextField *) _username {
@synchronized(self) {
[_username retain];
[username release];
username = _username;
}
}
Property trong Objective-C (tt)
Cc thu/c tnh (attributes)
- nonatomic
// @property (retain, nonatomic) UITextField *username;
// Generates roughly
- (UITextField *) username {
return username;
}
- (void) setUsername : (UITextField *) _username {
[_username retain];
[username release];
username = _username;
}
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
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 method
MyClass *myClass = [MyClass method];

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


Category trong Objective-C
Khi mu0n thm m/t s0 ph&'ng th(c vo
m/t l!p c sAn
MB r/ng l!p ! b9ng cch vi)t l*i m ngu@n
MB r/ng l!p ! khng c8n vi)t l*i m ngu@n
--> Category
MyClass.h
@interface MyClass : NSObject{
}
- (void) showMe;
@end
MyClass.m
@implementation MyClass
- (void) showMe {
// show me
}
@end
Category trong Objective-C (tt)
Thm m/t ph&'ng th(c newMethod cho
l!p MyClass thng qua Category
MyClass+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 th2 hi&n
Procol trong Objective-C
Protocol l g ?
V d6:
@protocol MyProtocol
// required (default)
- (void) requiredMethod;

@optional
- (void) anOptionalMethod;
- (void) anotherOptionalMethod;

@required
- (void) anotherRequiredMethod;

@end
K- th3a
T&'ng t: nh& cc ngn ng2 khc
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{
float fSalary;
}
//
@end
Person



Teacher
X4 l ngo+i l&
M$t s5 c,u trc i'u khi2n
If
For
Switch
While
Qu6n l b$ 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
Qu6n l b$ nh%
Cc nguyn t$c qu1n l" b/ nh!
Nguyn t$c c%n b1n
Khi b*n n$m quy#n sB h2u m/t !0i t&4ng, khBi t*o !0i t&4ng b9ng
cc ph&'ng th(c m trong tn b$t !8u v!i v!i alloc ho%c new ho%c
copy (v d6, alloc, newObject ho%c mutableCopy) ho%c g.i m/t
thng !i"p retain, b*n ph1i c trch nhi"m gi1i phng quy#n sB h2u
!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 tr2 m/t !0i t&4ng !&4c nh3n nh& m/t property
trong m/t bi)n th, hi"n, b*n ph1i retain ho%c copy n. (#i#u ny
khng !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 trong
ph&'ng th(c m n ! !&4c nh3n (ngo*i tr- trong cc (ng !a lu@ng
v vi tr&;ng h4p Distributes Objects). Ph&'ng th(c ! c th, tr1
v# an ton !0i t&4ng m n !&4c tri"u g5i. S. d6ng retain trong
vi"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" bn
ngoi.
autorelease c ngh$a l g.i m/t thng !i"p release sau !
Qu6n l b$ nh%
V+n !# khi khBi t*o !0i t&4ng
MyClass *myClass = [MyClass alloc];
[myClass init];
if(myClass) {
//
}
???
Qu6n l b$ nh%
V+n !# khi khBi t*o !0i t&4ng (tt)
MyClass *myClass = [[MyClass alloc] init];
if(myClass) {
//
}
OK
Ch !: - Lun lun tr6 v' nil trong ph./ng th"c init n-u c l7i x6y ra
- Ph6i k-t h1p 02 l8i g9i ph./ng th"c alloc v init
Qu6n l b$ nh%
Release
Ch= !&4c release khi khBi t*o !0i t&4ng
m/t cch th> cng alloc
KHNG release th> cng m/t !0i t&4ng
autorelease --> CRASH
// string2 will be released automatically
NSString *string2 = [NSString string];
// Must release string1 when done
NSString *string1 = [[NSString alloc] init];
//
[string1 release];
!"#$%&'&()&
%&'&()&
Qu6n l b$ nh%
Retain
MEi !0i t&4ng c m/t b/ !)m !&4c s. d6ng !, ki,m
sot t+t c1 cc tham chi)u bBi !0i t&4ng ho%c n c
Ph&'ng th(c alloc, new, copy v retain !#u lm t%ng
b/ !)m ln 1
Ph&'ng th(c release gi1m b/ !)m !i 1
Khi b/ !)m c gi tr< b9ng 0 --> Ph&'ng th(c dealloc
c>a !0i t&4ng s? !&4c g5i
#, xc !<nh gi tr< c>a b/ !)m: [object retainCount]
Qu6n l b$ 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&'ng
th(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];
//
[super dealloc];
}
Qu6n l b$ 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
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 !<nh danh duy nh+t m thay th)
cho m/t tn khi m ngu@n !&4c bin d<ch

You might also like