introduce ios operation
TRANSCRIPT
TÌM HIỂU VỀ IOSGVHD:Nguyễn Trần Thi VănSV thực hiện:1.Nguyễn Cao Thắng2.Nguyễn Mậu Đức3.Lê Bá Hoàng
Nội dung báo cáo
Giới thiệu sơ lược Giới thiệu về object C Giới thiệu về cấu trúc của ứng dụng IOS Công cụ lập trình Xcode xây dựng ứng dụng IOS Demo
Giới thiệu sơ lược
Giới thiệu sơ lược Lịch sử phát triển :
iOS là hệ điều hành di dộng của Apple ban đầu được gọi là hệ điều hành dành cho iPhone và đến tháng 6 năm 2010 thì chính thức được đổi gọi tên là “iOS”. Ban đầu, hệ điều hành này chỉ được phát triển riêng cho iPhone nhưng sau đó được mở rộng để hỗ trợ các thiết bị khác của Apple như iPod touch, iPad và Apple TV.
Giới thiệu sơ lược
Các phiên bản của hệ điều hành IOS:Phiên bản 1.XPhiên bản 2.XPhiên bản 3.XPhiên bản 4.XPhiên bản 5.XPhiên bản 6.XPhiên bản 7.XPhiên bản 8.X (8.0,8.1)
Giới thiệu sơ lược
Các ngôn ngữ để lập trình trên IOS:- HTML, JavaScript với PhoneGap- C# với MonoTouch-Object C (ngôn ngữ chính để lập trình trên IOS cho tới hiện nay)-Ngôn ngữ Swift (ngôn ngữ mới có nhiều điểm vượt trội hơn
Object C , được đánh giá là ngôn ngữ sẽ thay thế Object C trong tương lai)
Objective - C
Nội dung báo cáo:
Khai báo biến Kiểu dữ liệu Các phép toán Hàm (Function) Cấu trúc điều kiện Cấu trúc lặp Mảng Chuỗi
Class và Object Hướng đối tượng trong Object C Category và Class Extensions Protocol Properties
1.Giới thiệu ngôn ngữ Objective C
Ngôn ngữ Objective-C được tạo ra bởi Brad Cox và Tom Love vào năm 1980 tại công ty Stepstone.
Đến cuối tháng 12 năm 1996, hãng Apple đã mua lại công ty NeXT Software, môi trường NEXTSTEP/OPENSTEP đã trở thành phần cốt lõi của hệ điều hành OS X mà Apple giới thiệu sau này.
Ngôn ngữ lập trình Objective-C dựa trên nền tảng ngôn ngữ C nhưng bổ sung thêm hỗ trợ lập trình hướng đối tượng
2.Khai báo biến –cách đặt tên.
2.1 Biến Biến được sử dụng để lưu trữ các giá trị của ứng dụng. Biến gồm có: kiểu dữ liệu, tên
biến và giá trị của biến Cú pháp
type variable_list; hoặc type variable_name = value; Ví dụ:
int i,j,k; hoặc int i=1, j=2, k=3;
char c,ch; hoặc char c = ‘x’;
2.2 Quy tắc đặt tên:
Quy tắc đặt tên biến:
- Ngôn ngữ Objective-C có phân biệt hoa thường.
- Tên biến không có dấu tiếng việt.
- Tên biến không có khoảng trắng.
- Tên biến không được bắt đầu bằng số.
- Tên biến không được có các ký tự đặc biệt (ngoại trừ dấu gạch dưới _)
- Tên biến không được đặt trùng với các từ khoá của ngôn ngữ objective-C. VD: void, if, static, ...
3.Kiểu dữ liệu
4.Toán tử (Operator): Toán tử số học (Arithmetic Operators):
Phép toán Mô tả Ví dụ+ Cộng 2 toán hạng A + B // = 30 A=20, B=
10.- Trừ toán hạng đầu với toán hạng 2 A – B // = 10* Nhân các toán hạng với nhau A * B // = 200/ Chi tử số cho mẫu số A / B // = 2% Chia lấy số dư A % B // = 0++ Tăng toán hạng lên 1 đơn vị số nguyên. A++ // = 11-- Giảm toán hạng xuống 1 đơn vị số
nguyên.A-- // = 9
Toán tử quan hệ (Relational Operators)
Phép toán Mô tả Ví dụ
== Kiểm tra 2 toán hạng có bằng nhau hay không, nếu đúng trả về giá trị true
(A == B) // not true A=10, B=20.
!= Kiểm tra 2 toán hạng có bằng nhau hay không,nếu không bằng trả về giá trị true
(A != B) // true
> Kiểm tra toán hạng bên trái có giá trị lớn hơn giá trị toán hạng bên phải, nếu đúng trả về giá trị true
A > B // not true
< Kiểm tra toán hạng bên trái có giá trị nhỏ hơn giá trị toán hạng bên phải, nếu đúng trả về giá trị true
A < B // true
>= Kiểm tra toán hạng bên trái có giá trị lớn hơn hoặc bằng với giá trị bên phải, nếu đúng trả về true
A >= B // not true
<= Kiểm tra toán hạng bên trái có giá trị nhỏ hơn hoặc bằng với giá trị bên phải, nếu đúng trả về true
A <= B // true
6.Function Function là tập hợp các dòng code, gom thành 1 khối. Khối code này được đặt tên.Khối
code này chỉ được thực thi khi tên khối code được gọi. Khai báo:
- (return_type) function_name:( argumentType1 )argumentName1
joiningArgument2:( argumentType2 )argumentName2 ...
joiningArgumentn:( argumentTypen )argumentNamen; Cú pháp:
- (return_type) method_name:( argumentType1 )argumentName1
joiningArgument2:( argumentType2 )argumentName2 ...
joiningArgumentn:( argumentTypen )argumentNamen
{
body of the function
}
Ví dụ :
-(int) max:(int)num1 andNum2:(int)num2; // khai báo hàm.
- (int) max:(int) num1 secondNumber:(int) num2 // code thực thi hàm.{
int result;
if (num1 > num2)
{
result = num1;
}
else
{
result = num2;
}
return result;
}
7.Cấu trúc điều kiện
7.1 Câu lệnh if :
Cú pháp:
if(boolean_expression)
{
/* statement(s) will execute
if the boolean expression is true */
}
Ví dụ:
int a = 10;
if( a < 20 )
{
NSLog(@"a is less than 20\n" );
}
NSLog(@"value of a is : %d\n", a);
7.2 Câu lệnh if…else Cú pháp:
if(boolean_expression)
{
/* statement(s) will execute
if the boolean expression is true */
}
else
{
/* statement(s) will execute
if the boolean expression is false */
}
7.2 Câu lệnh switch….case: Cú pháp:
switch(expression){
case constant-expression :
statement(s);
break; /* optional */
case constant-expression :
statement(s);
break; /* optional */
/* you can have any number of case statements */
default : /* Optional */
statement(s);
}
Ví dụ:char grade = ‘C';switch(grade) { case 'A' : NSLog(@"Excellent!\n" ); break; case 'B' : case 'C' : NSLog(@"Well done\n" ); break; case 'D' : NSLog(@"You passed\n" ); break;default : NSLog(@"Invalid grade\n" ); } NSLog(@"Your grade is %c\n", grade ); // Your grade is C
7.3 Toán tử ?:
Cú pháp:
Điều kiện ? Biểu thức 1 : Biểu thức 2
Ví dụ:
int x = 5, s;
s = (x < 0) ? -1 : x * x ; // =25
8.Cấu trúc lặp 8.1 Vòng lặp for Cú pháp:
for (int ;condition; increment)
{
statement;
} Ví dụ :
int a;
for( a = 10; a < 20; a = a + 1 )
{
NSLog(@"value of a: %d\n", a);
}
8.2 Vòng lặp while Cú pháp:
while (condition)
{
statement;
} Ví dụ:
int a = 10;
while( a < 20 )
{
NSLog(@"value of a: %d\n", a);
a++;
}
8.3 Vòng lặp do….while Cú pháp:
do
{
statement;
}while ( condition ); Ví dụ:
int a = 10;
do
{
NSLog(@"value of a: %d\n", a);
a = a + 1;
}while( a < 20 );
Câu lệnh break: Câu lệnh continue:
Classes Và Object Trong Object C
Khai báo Objective-C Class
@interface Box:NSObject
{ //Biến thành viên
double height;
double length;
double breadth;
}
@property(nonatomic, readwrite) double height; // Property
-(double) volume; // Phương thức.
@end Khởi tạo đối tượng Object C
Box box1 = [[Box alloc]init];
Box box2 = [[Box alloc]init];
Ví dụ truy suất dữ liệu thành viên Khai báo class – khu vực @interface Thực thi class – khu vực @implement
@implementation Box
@synthesize height;
-(id)init {
self = [super init];
length = 1.0;
breadth = 1.0;
return self;}
-(double) volume {
return length*breadth*height; }
@end
Tạo đối tượng và truy suất dữ liệu thành viên
int main( )
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
Box *box1 = [[Box alloc]init];
Box *box2 = [[Box alloc]init];
double volume = 0.0;
box1.height = 5.0;
box2.height = 10.0;
volume = [box1 volume];
NSLog(@"Volume of Box1 : %f", volume);
volume = [box2 volume];
NSLog(@"Volume of Box2 : %f", volume);
[pool drain];
return 0;
}
Volume of Box1 : 5.000000Volume of Box2 : 10.000000
Kế thừa trong Object C Cú pháp:
@interface class-name : base-class Tất cả class trong object c đều kế thừa tử lớp cơ sở NSObject. Sơ đồ phân cấp foundation framework:
Object c là ngôn ngữ lập trình hướng đối tượng.
#import <Foundation/Foundation.h>@interface Person : NSObject{ NSString *personName; NSInteger personAge;}- (id)initWithName:(NSString *)name andAge:(NSInteger)age;- (void)print;@end@implementation Person- (id)initWithName:(NSString *)name andAge:(NSInteger)age{ personName = name; personAge = age; return self;}- (void)print{ NSLog(@"Name: %@", personName); NSLog(@"Age: %ld", personAge);}@end
@interface Employee : Person{ NSString *employeeEducation;}- (id)initWithName:(NSString *)name andAge:(NSInteger)age andEducation:(NSString *)education;- (void)print;@end@implementation Employee- (id)initWithName:(NSString *)name andAge:(NSInteger)age andEducation: (NSString *)education { personName = name; personAge = age; employeeEducation = education; return self; }- (void)print { NSLog(@"Name: %@", personName); NSLog(@"Age: %ld", personAge); NSLog(@"Education: %@", employeeEducation); }@end
int main(int argc, const char * argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSLog(@"Base class Person Object");
Person *person = [[Person alloc]initWithName:@"Raj" andAge:5];
[person print];
NSLog(@"Inherited Class Employee Object");
Employee *employee = [[Employee alloc]initWithName:@"Raj"
andAge:5 andEducation:@"MBA"];
[employee print];
[pool drain];
return 0;
}
Base class Person ObjectName: RajAge: 5Inherited Class Employee ObjectName: RajAge: 5Education: MBA
Đa Hình Trong Hướng Đối Tượng Object C
#import <Foundation/Foundation.h>
@interface Shape : NSObject
{
CGFloat area;
}
- (void)printArea;
- (void)calculateArea;
@end
@implementation Shape
- (void)printArea{
NSLog(@"The area is %f", area);
}
- (void)calculateArea{
}
@end
@interface Square : Shape
{
CGFloat length;
}
- (id)initWithSide:(CGFloat)side;
- (void)calculateArea;
@end
@implementation Square
- (id)initWithSide:(CGFloat)side{
length = side;
return self; }
- (void)calculateArea { area = length * length; }
- (void)printArea { NSLog(@"The area of square is %f", area); }
@end
@interface Rectangle : Shape{ CGFloat length; CGFloat breadth;}- (id)initWithLength:(CGFloat)rLength andBreadth:(CGFloat)rBreadth;@end@implementation Rectangle- (id)initWithLength:(CGFloat)rLength andBreadth:(CGFloat)rBreadth{ length = rLength; breadth = rBreadth; return self;}- (void)calculateArea{ area = length * breadth;}@end
int main(int argc, const char * argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
Shape *square = [[Square alloc]initWithSide:10.0];
[square calculateArea];
[square printArea];
Shape *rect = [[Rectangle alloc]
initWithLength:10.0 andBreadth:5.0];
[rect calculateArea];
[rect printArea];
[pool drain];
return 0;
}
The area of square is 100.000000The area is 50.000000
Tính Đóng Gói Dữ Liệu Trong Object C#import <Foundation/Foundation.h>
@interface Adder : NSObject
{
NSInteger total;
}
- (id)initWithInitialNumber:(NSInteger)initialNumber;
- (void)addNumber:(NSInteger)newNumber;
- (NSInteger)getTotal;
@end
@implementation Adder
-(id)initWithInitialNumber:(NSInteger)initialNumber{
total = initialNumber;
return self; }
- (void)addNumber:(NSInteger)newNumber {total = total + newNumber; }
- (NSInteger)getTotal{ return total;}
@end
int main(int argc, const char * argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
Adder *adder = [[Adder alloc]initWithInitialNumber:10];
[adder addNumber:5];
[adder addNumber:4];
NSLog(@"The total is %ld",[adder getTotal]);
[pool drain];
return 0;
}
The total is 19
9.Mảng
9.1 Mảng NSArray
Cú pháp:
NSArray *tên_mảng;
Type arrayName [ arraySize ];
Ví dụ:
NSArray *mangTen;mangTen=[[NSArray alloc] initWithObject:@”caothang”,@”mauduc”,@”bahoang”,nil];int count = [mangTen count];NSLog(@”So phan tu cua mang %i”,count);NSLog(@”Phan tu thu 1 la: %@”,[mangTen objectAtIndex:1]);
Mảng nhiều chiều:
Khai báo: type name[size1][size2]...[sizeN];
ví dụ : int threedim[5][10][4]; Khởi tạo:
int a[3][4] = {
{0, 1, 2, 3} , /* dòng 1 */ {4, 5, 6, 7} , /* dòng 2 */ {8, 9, 10, 11} /* dòng 3 */};
int a[3][4] = {0,1,2,3,4,5,6,7,8,9,10,11};
10.Chuỗi10.1 Khởi tạo chuỗi:
NSString *tenChuoi = @” Nội dung của chuỗi”;
NSString *message = [NSString stringWithFormat:@"Nôi dung của chuỗi"]; Ví dụ:
NSString *nhom = @”Nhóm 10”;
NSString *detai = [NSString stringWithFormat:@”Tìm hiều về %@”,@”IOS”];
Đối với chuối trong Objective-C phải bắt đầu bằng @. Để kiểm tra giá trị của chuỗi ta dung hàm NSLog.
NSLog(@”%@”,@”Tim hieu objectC”); Đếm số lượng ký tự (chiều dài của chuỗi):
int len=[@”Object -C” lenght];
NSLog(@”Chieu dai cua chuoi la %i”,len);
10.2 Đối tượng NSString: Tạo đối tượng có kiểu là NSString để có thể sử dụng các thao tác lien quan đến chuỗi do
Class NSString cung cấp (ghép chuỗi, cắt chuỗi…) : NSString *str1=@”Objective -C”; Tìm kiếm bên trong chuỗi :
[chuỗi_1 rangeOfString:chuỗi_2] ;//tìm chuỗi 1 có xuất hiện trong chuỗi 2 hay không. Tìm chuỗi và thay thế nó bằng chuỗi khác:
[chuỗi _1 replaceCharactersInRange:NSMakeRange(vi_tri,do_dai) withString:chuỗi_2]; Xóa nội dung bên trong chuỗi:
[chuỗi_1 deleteCharactersInRange: [chuỗi_1 rangOfString:@”string of chuỗi_1”] ; Chèn ký tự vào chuỗi:
[chuỗi_1 insertString:@”string” atIndex:vitri];
[chuỗi_1 appendString:@”string”]; // chèn vào cuối chuỗi 1.
11.1 Categories11.1 Categories
Categories cung cấp cách đơn giản để mở rộng một class đã tồn tại mà không cần truy xuất đến code gốc của nó và không cần tạo ra lớp con.
Cách dùng: import interface section gốc : Khai báo category:
@interface ClassName (CategoryName)
@end -Thực thi class:@implementation ClassName (CategoryName)
{
// code…
}
#import <Foundation/Foundation.h>
@interface NSString(MyAdditions)
+(NSString *)getCopyRightString;
@end
@implementation NSString(MyAdditions)
+(NSString *)getCopyRightString{
return @“Tìm hiểu lập trình IOS"; }
@end
int main(int argc, const char * argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSString *copyrightString = [NSString getCopyRightString];
NSLog(@“Ví dụ Category: %@",copyrightString);
[pool drain];
return 0;
}
Ví dụ Category:Tìm hiểu lập trình IOS
11.2 Class Extensions
Trường hợp đặc biệt cho phép tạo ra category không cần tên.
Cú pháp:
@interface ClassName ()
….
@end
Class extension hữu dụng bởi vì phương thức của nó private.Do đó,class extension sử dụng khi bạn muốn viết class chứa dữ liệu và phương thức chỉ dùng trong class này.
Ví dụ Class Extensions
#import <Foundation/Foundation.h>
@interface SampleClass : NSObject
{
NSString *name;
}
- (void)setInternalID;
- (NSString *)getExternalID;
@end
@interface SampleClass()
{
NSString *internalID;
}
@end
Thực thi class
@implementation SampleClass
- (void)setInternalID{
internalID = [NSString stringWithFormat:
@"UNIQUEINTERNALKEY%dUNIQUEINTERNALKEY",arc4random()%100];
}
- (NSString *)getExternalID{
return [internalID stringByReplacingOccurrencesOfString:
@"UNIQUEINTERNALKEY" withString:@""];
}
@end
Chạy chương trình:
int main(int argc, const char * argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
SampleClass *sampleClass = [[SampleClass alloc]init];
[sampleClass setInternalID];
NSLog(@"ExternalID: %@",[sampleClass getExternalID]);
[pool drain];
return 0;
} ExternalID: 51
11.3 Protocol
Protocol là danh sách các phương thức để chia sẻ cho nhiều class.Những phương thức được liệt kê trong protocol không có phần thực thi tương ứng.
Khai báo:
@protocol ProtocolName
@required
// Danh sách các phương thức bắt buộc
@optional
// Danh sách các phương thức tùy chọn
@end Thực thi
@interface MyClass : NSObject <MyProtocol>
...
@end
Ví dụ:
#import <Foundation/Foundation.h>
@protocol PrintProtocolDelegate
- (void)processCompleted; // mặc định @required
@end
@interface PrintClass :NSObject
{
id delegate;
}
- (void) printDetails;
- (void) setDelegate:(id)newDelegate;
@end
@implementation PrintClass
- (void)printDetails{ NSLog(@"Printing Details");
[delegate processCompleted]; }
- (void) setDelegate:(id)newDelegate{
delegate = newDelegate; }
@end
Thực thi protocol
@interface SampleClass:NSObject<PrintProtocolDelegate>
- (void)startAction;
@end
@implementation SampleClass
- (void)startAction{
PrintClass *printClass = [[PrintClass alloc]init];
[printClass setDelegate:self];
[printClass printDetails];
}
-(void)processCompleted{
NSLog(@"Printing Process Completed");
}
@end
Tạo đối tượng và gọi phương thức
int main(int argc, const char * argv[])
{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
SampleClass *sampleClass = [[SampleClass alloc]init];
[sampleClass startAction];
[pool drain];
return 0;
}
Printing DetailsPrinting Process Completed
12. Property
Property cho phép đinh nghĩa các bộ truy xuất (setter/getter)Þ mục đích của nó giúp cho việc truy xuất đến các biến 1 cách dễ dàng.
Ví dụ:- Định nghĩa trong file .h
@property(<attribute>)type propertyName;- Thực thi trong file .m
@synthesize propertyName;
Các attribute dùng trong property readwrite(mặc định): cho phép đọc và ghi(get/set) read-only: chỉ có thể đọc (get) assign(mặc định) dùng với các kiểu vô hướng: NSString, NSInteger, CGFloat… retain: thường được sử dụng cho đối tượng copy: tạo một bản sao lưu của đối tượng atomic (mặc định) thực hiện đồng bộ hoá nonatomic: ngược lại với atomic.
Cấu trúc của ứng dụng IOS
Cấu trúc ứng dụng IOSSuốt quá trình khởi động,hàm UIApplicationMain
khởi tạo một số đối tượng chính,và bắt đầu chạy ứng dụng.Trái tim của mỗi ứng dụng IOS là đối tượng UIApplication , công việc của đối tượng này là làm cho hệ thống và các đối tượng khác trong ứng dụng trao đổi với nhau một cách dễ dàng linh hoạt .Hình bên chỉ ra những đối tượng phổ biến thường gặp trong hầu hết các ứng dụng của IOS.
Ứng dụng IOS sử dụng công nghệ model-view-controller
Processing events in the main run loop
Main run loop quản lý tất cả các sự kiện có liên quan đến người dùng.Đối tượng UIApplication khởi tạo main run loop vào thời gian khởi động và dùng nó để quản lý các sự kiện và cập nhật nó trên giao diện. The main run loop thực hiện trên luồng chính của ứng dụng.Hành vi đó đảm bảo rằng các sự kiện liên quan đến người sự dụng được sử lý tuần tự theo thứ tự mà họ đã nhận được.
State changes in an iOS app
Hệ thống chuyển ứng dụng của bạn từ trạng thái này đến trạng thái khác để phản ứng lại hành động xảy ra xuyên suốt hệ thống.
Công Cụ Lập Trình Xcode 5
1.Giới thiệu công cụ
Xcode là một IDE dành riêng cho việc phát triển phần mêm trên môi trường MAC và cả IOS.
Đây là một ứng dụng hoàn toàn miễn phí của Apple nhằm hỗ trợ cho các lập trình viên có thể phát triển các ứng dụng và game dành cho hệ sinh thái của Apple.
Cho tới tháng 9/2013, Xcode đã được phát triển tới phiên bản 5.0 mang nhiều tính năng mới mẻ và phù hợp với IOS 7.
2.Các phân vùng chính trên Xcode 5
Xcode gồm 5 phần chính : Debug area: đây là vùng hỗ trợ chương trình trong quá trình debug lỗi Toolbar area: vùng chứa các công cụ tiện ích giúp bạn có thể đơn giản trong việc chạy
debug ứng dụng ,lựa chọn IOS Simulator ,đóng mở các vùng khác… Edit area: vùng để bạn thiết kế giao diện , viết và chỉnh sửa code của chương trình Utility area :vùng này cho phép các bạn chỉnh sửa các tham số ,các giá trị tương đối trên
giao diện ,cũng như cho phép các bạn kéo thả và sử dụng đối tượng sẵn có của Xcode Button,Label,Slider..hay các đoạn code mẫu.
Navigator area: cung cấp cho bạn các nhìn trực quan ,tiện lợi cho việc quản lý ứng dụng,xem thông báo lỗi ,tìm kiếm một đoạn code trong chương trình hay kiểm tra mức độ hoạt động của RAM,CPU…khi chạy ứng dụng…
4. Thao tác trên xcode Tạo mới project rỗng.
Chọn “Create a new Xcode project” ( File > New > Project) ở màn hình chính.
Xcode sẽ mở ra cữa sỗ mới để bạn chọn template cho project của mình.
Một màn hình khác xuất hiện, cho phép bạn đặt tên và tủy chỉnh mở rộng
Xcode mở project ở màn hình workspace:
Những phân vùng chính trên màn hình workspace
Utility area
Navigation area
Editor area
Toolbar area
Debug area:
Chạy ứng dụng trên IOS Simulator Chọn thiết bị trên Scheme pop-up menu trong Xcode toolbar.
Nhấn button run đặt bên góc trên cùng bên trái của Xcode toolbar
Giao diện của IOS Simulator rỗng:
Demo