Upload
tran-cao-cuong-tran
View
67
Download
0
Embed Size (px)
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.
Citation preview
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 !