1. Trang chủ
  2. » Công Nghệ Thông Tin

Tự học lập trình iOS từ Cơ Bản – Chuyên Sâu

212 286 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 212
Dung lượng 7,6 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Nhiều bạn lập trình viện không có nhiều thời gian đến các trung tâm hoặc các trường học để có thể tham gia các khóa học lập trình iOS.Các bạn đang mong muốn tìm cho mình được 1 bộ tài liệu học lập trình iOS từ Cơ Bản – Chuyên Sâu. DevPro là một trong những trung tâm dạy lập trình iOS online, offline cho các bạn sinh viên, các nhân viên lập trình muốn tìm hiểu về ngôn ngữ thế hệ mới này để tạo cho mình 1 công việc và 1 mực lương tốt hơn trong cuộc sống. Nhưng không phải ai cũng có thời gian và điều kiện đến trung tâm để tham gia khóa học.Thấu hiểu được điều đó thì trung tâm DevPro đã xây dựng một bộ tài liệu học lập trình iOS từ Cơ Bản – Nâng cao giúp các bạn có thể tự học lập trình iOS tại nhà mà không phải tốn nhiều thời gian đến các trong tâm. MỤC LỤC Nhập môn ObjectiveC 2 Các kiểu dữ liệu cơ bản trong Objective C 2 Biến, hằng số, toán tử trong Objective C 5 Cấu trúc điều khiển trong Objective C 6 Cơ bản về hàm, class trong Objective C 9 Hướng dẫn cách sử dụng block trong Objective C 14 Cấu trúc của một chương trình trong lập trình IOS 17 Tạo ứng dụng Helloworld sử dụng Objective C (tạo ứng dụng Iphone đầu tiên trên iOS) 19 Tìm hiểu về Label, Button, TextField, Slider, Switch, Page Control trong iOS 24 Tìm hiểu về Progress View, Activity View, Segmented Control, Switch trong ios 29 Quản lý bộ nhớ trong IOS (Memory Management) 32 Điều hướng sử dụng Navigation controller 37 Hướng dẫn sử dụng Tabbar ViewController mở Webview, ImageView, Mapkit. 48 Hướng dẫn sử dụng file xib trong IOS. 59 Hướng dẫn sử dụng TableView trong IOS 64 Tương tác row selection trong Tableview 72 Hướng dẫn xóa 1 hàng trong TableView 76 Hướng dẫn sử dụng Sidebar 79 Hướng dẫn phân trang trong IOS sử dụng file xib 89 Hướng dẫn sử dụng CollectionView trong IOS 95 Hướng dẫn tương tác với CollectionView 105 Thêm Header và Footer trong UICollectionView 114 Phân tích XML parser 122 Hướng dẫn phân tích JSON 129 Hướng dẫn load dữ liệu từ Json vào TableView 143 Hướng dẫn Localization(đa ngôn ngữ) cho ứng dụng của bạn 155 Hướng dẫn thêm tính năng chia sẻ cho ứng dụng của bạn 163 Hướng dẫn sử dụng một máy quay và playback. 169 Hướng dẫn xây dung một máy ảnh đơn giản sử dụng UIImagePickkerViewcontroller 174 Vào ra file trong ios 179 AutoLayout trong ios 183 Hướng dẫn sử dụng SQLite trong ios 190 Hướng dẫn sử dụng Coredata trong ios 203

Trang 1

Tự học lập trình iOS từ Cơ Bản – Chuyên

Sâu

Nhiều bạn lập trình viện không có nhiều thời gian đến các trung tâm hoặc các trường học để có thể tham gia các khóa học lập trình iOS.Các bạn đang mong muốn tìm cho mình được 1 bộ tài liệu học lập trình iOS từ Cơ Bản – Chuyên Sâu

DevPro là một trong những trung tâm dạy lập trình iOS online, offline cho các bạn sinh viên, các nhân viên lập trình muốn tìm hiểu về ngôn ngữ thế hệ mới này để tạo cho mình 1 công việc và 1 mực lương tốt hơn trong cuộc sống

Nhưng không phải ai cũng có thời gian và điều kiện đến trung tâm để tham gia khóa học.Thấu hiểu được điều

đó thì trung tâm DevPro đã xây dựng một bộ tài liệu học lập trình iOS từ Cơ Bản – Nâng cao giúp các bạn có thể tự học lập trình iOS tại nhà mà không phải tốn nhiều thời gian đến các trong tâm

MỤC LỤC

Nhập môn Objective-C 2

Các kiểu dữ liệu cơ bản trong Objective C 2

Biến, hằng số, toán tử trong Objective C 5

Cấu trúc điều khiển trong Objective C 6

Cơ bản về hàm, class trong Objective C 9

Hướng dẫn cách sử dụng block trong Objective C 14

Cấu trúc của một chương trình trong lập trình IOS 17

Tạo ứng dụng Helloworld sử dụng Objective C (tạo ứng dụng Iphone đầu tiên trên iOS) 19

Tìm hiểu về Label, Button, TextField, Slider, Switch, Page Control trong iOS 24

Tìm hiểu về Progress View, Activity View, Segmented Control, Switch trong ios 29

Quản lý bộ nhớ trong IOS (Memory Management) 32

Điều hướng sử dụng Navigation controller 37

Hướng dẫn sử dụng Tabbar ViewController mở Webview, ImageView, Mapkit 48

Hướng dẫn sử dụng file xib trong IOS 59

Hướng dẫn sử dụng TableView trong IOS 64

Tương tác row selection trong Tableview 72

Hướng dẫn xóa 1 hàng trong TableView 76

Hướng dẫn sử dụng Sidebar 79

Hướng dẫn phân trang trong IOS sử dụng file xib 89

Hướng dẫn sử dụng CollectionView trong IOS 95

Hướng dẫn tương tác với CollectionView 105

Thêm Header và Footer trong UICollectionView 114

Phân tích XML parser 122

Hướng dẫn phân tích JSON 129

Hướng dẫn load dữ liệu từ Json vào TableView 143

Hướng dẫn Localization(đa ngôn ngữ) cho ứng dụng của bạn 155

Hướng dẫn thêm tính năng chia sẻ cho ứng dụng của bạn 163

Hướng dẫn sử dụng một máy quay và playback 169

Hướng dẫn xây dung một máy ảnh đơn giản sử dụng UIImagePickkerViewcontroller 174

Vào ra file trong ios 179

Trang 2

[Tự học lập trình iOS từ Cơ Bản – Chuyên Sâu]

I Nhập môn Xcode và Objective-C

1 Nhập môn Objective-C

Objective-C là ngôn ngữ được Apple phát triển từ C và có tính hướng đối tượng Cụ thể tính đối tượng như thế nào mình sẽ hướng dẫn các bạn trong các bài học của mình

Để bắt đầu, bạn cần phải sử dụng hệ điều hành Mac OS (trên máy Mac hoặc Hackintosh) và

dĩ nhiên là phải cài ứng dụng Xcode (do Apple phát triển và cung cấp miễn phí) Để nhận dạng ứng dụng Xcode thì bạn nhìn vào hình nhé!

2 Bạn cần một máy tính MAC OS hay Laptop tương thích hoặc Laptop cấu hình tốt…

- MAC OS giá khá đắt

- Laptop cài song song yêu cầu cấu hình tương thích, chạy ổn định như MAC giá rẽ hợp sinh viên

- Laptop cấu hình mạnh, ram 8GB cài máy ảo yếu hơn cài song song

3 Bạn cần tạo một tài khoản Apple ID để phát triển phầm mềm

Vào trang này để khởi tạo tài khoản https://appleid.apple.com

4 Tải về Xcode trên máy MAC từ MAC App Store

Đăng nhập bằng Apple ID để tải Xcode từ MAC App Store

5 Sau khi cài đặt xong

Một khi hoàn tất quá trình cài đặt, bạn sẽ tìm thấy Xcode trong phần Launchpad

II Các kiểu dữ liệu cơ bản trong Objective C

Như các bạn đã biết muốn tìm hiểu bất cứ ngôn ngữ nào ban đầu ta luôn tìm hiểu các kiểu dữ liệu của chúng Việc nắm bắt được phạm vi, cách dùng các kiểu dữ liệu giúp các bạn lập trình không bị sai, hiểu được cách quản lý từng đoạn code

Bài đầu tiên mình giới thiệu cụ thể các kiểu dữ liệu nguyên thủy và các kiểu dữ liệu đối tượng trong Objective C

1 Các kiểu dữ liệu nguyên thủy trong C

Trong Objective C, hầu hết các kiểu dữ liệu cơ bản trong ngôn ngữ lập trình C đều sử dụng được một cách trực tiếp bao gồm integer (int), float, char, double,float,enum, … Trong C++ cũng được dụng nhưng phải sử dụng file trung gian để kết nối

Trang 3

unsigned char 1 byte [0 - 255]

unsigned int 4 byte [0 - 4294967295]

signed int 4 byte [-2147483648 - 2147483647]

unsigned short int Range [0 - 65535]

signed short int Range [-32768 - 32767]

long int 4 byte [-2147483647 - 2147483647] unsigned long int 4 byte [0 - 4,294,967,295]

signed long int 4 byte [-2147483647 - 2147483647]

Số thực dạng double double 8 byte [+/- 1.7e +/- 308 (~15 ký số)]

long double 8 byte [+/- 1.7e +/- 308 (~15 ký số)] Kiểu không có giá trị void

 signed (kiểu có dấu)

 unsigned (kiểu không có dấu)

 short

 long Các kiểu dữ trên trong Objective C sử dụng giống trong C cơ bản! ! !

Ví dụ: cách khai báo - int a = 5;

float b = 5.5; double c = 11.11; char str[5] = “objec”;

unsign int uI = 8; -

2 Các kiểu dữ liệu đối tượng trong Objective C

- NSString

Kiểu chuỗi ký tự trong Objective C Kiểu NSString không thể thay đổi

Ví dụ: khai báo NSString - NSString *str1 = [[NSString alloc] init]; //Khai báo cách 1

NSString *str2 = @”test”; //Khai báo cách 2 -

Trang 4

[Tự học lập trình iOS từ Cơ Bản – Chuyên Sâu]

Kiểu chuỗi ký tự trong Objective C Kiểu NSMutableString có thể thay đổi

Lưu ý: NSMutableString không được khai báo tắt theo cách 2 (phần ví dụ NSString)

NSArray *arr1=[[NSArray alloc]initWithObjects:@"ngo",@(5), nil];

//Cách khai báo 2 arr0=@[@(1),@"2"];

NSDictionary *dict1=[[NSDictionary alloc]initWithObjectsAndKeys:@(1),@"key",@(2),@"key1", nil];

//Cách 2 NSDictionary *dict=@{@"key1":@(1),@"key":@(2)};

Tương tự kiểu nguyên thủy float framework graphic tùy biến thành CGFloat

- true/false hay YES/NO

Có 3 kiểu chính BOOL (8bit) : YES/NO dùng trong Objective C bool (16/32/64/… bit tùy môi trường) : true/false Boolean (8bit) : TRUE/FALSE

Ví dụ - Boolean boolA = TRUE;

bool boolB = true;

BOOL boocC = YES;

-

III Biến, hằng số, toán tử trong Objective C

Ở phần trước mình đã làm rõ khái niệm kiểu dữ liệu, giới thiệu các kiểu dữ liệu nguyên thủy c, c++, cũng như các kiểu dữ liệu đối tượng trong Objective C Mình cũng đã sử dụng các biến để thử các kiểu dữ liệu Bài này mình sẽ làm rõ biến là gì? , hằng số là gì?, cách dùng? Giới thiệu các

Trang 5

1 Biến

+) Bộ nhớ máy tính được tổ chức đơn vị nhỏ nhất là là ô nhớ (đơn vị byte) Biến cơ bản

là lưu trong ô nhớ trong bộ nhớ máy tính, được dành riêng để lưu trữ các dữ liệu và truy xuất giá trị

+) Mỗi biến có một tên riêng lưu trữ một giá trị riêng tùy vào kiểu dữ liệu

+) Mỗi biến và giá trị sẽ tự mất đi trong bộ nhớ nếu ứng dụng ngừng chạy

+) Giá trị của các biến có thể thay đổi được

+) Cách truy xuất biến trong Objective C, như thế nào ? Mình minh họa một số ví dụ sau:

Ví dụ Cách khai báo biến: kiểu dữ liệu [tên biến] = giá trị biến;

- //int[kiểu dữ liệu] bien[tên biến] = 8[giá trị biến];

int bien = 8;

- Giá trị của biến có thể thay đổi được

- int a = 1;

Hằng số cũng là biến, nó có thể được khai báo là biến thường hay biến con trỏ

Biến hằng số: có giá trị không thể thay đổi được trong toàn ứng dụng

Giá trị của biến hằng số được gán ngay sau khi khai báo biến

Hằng số thường được khai báo ở đầu đoạn code hoặc Class chạy đầu tiên nhất trong ứng dụng

Khai báo:

{ int const hangSoA = 8;

} Chúng ta không thể thay đổi giá trị của hangSoA một khi đã khai báo Nếu thay đổi chương trình sẽ báo lỗi khi chạy

int b = 2;

Trang 6

[Tự học lập trình iOS từ Cơ Bản – Chuyên Sâu]

int chia = b / a; //trả về 2 int du = a % b; //trả về 1 -

- Toán tử phức hợp : “+=, -=, *=, /=”

Ví dụ - int a = 1;

a += 1; //Tương đương với a = a + 1 (2) Áp dụng với các phép toán khác

-

- Toán tử tăng, giảm giá trị : “++, ”

Ví dụ - int i = 1;

i++; //Tăng 1 đơn vị (i = i +1)

i ; //Giảm 1 đơn vị (i = i – 1)

int b = 2;

a>b?NSLog(@“dung”):NSLog(@”sai”); //Nếu a > b thì trả về “dung”, ngược lại “sai” -

IV Cấu trúc điều khiển trong Objective C

Bài này mình sẽ giới thiệu các cấu trúc điều khiển trong Objective C Cũng giống các ngôn ngữ khác cấu trúc điều khiển là rất quan trọng, giúp điều hướng code, chạy giải thuật một cách tuyệt vời

Để giúp các bạn hiểu rõ, mình sẽ giới thiệu cụ thể cách khai báo và cách dùng của từng cấu trúc một cách cụ thể

1 Cấu trúc IF, IF ELSE kiểm tra true or false:

IF : Cấu trúc if chỉ thực hiện khi điều kiện trả về đúng

Khai báo tổng quát if(điều kiện đúng){

//Thực hiện khi điều kiện đúng }

Ví dụ

Trang 7

//Khai báo 2 biến int tuoi = 22;

NSString *ten = @”Nguyen Van A”;

//Kiểm tra điều kiện if(tuoi==22&&[ten isEqualToString:@”Nguyen Van A”]){

NSLog(@“Tuoi cua %@ la %d”, ten, tuoi);

} //Trường hợp này sẽ log ra kết quả nếu tên là “Nguyen Van A” và tuổi là 22 -

IF ELSE : Khi điều kiện đúng thì thực hiện lệnh trong if, ngược lại nếu điều kiện sai thì thực hiện lệnh trong else

Khai báo tổng quá if(điều kiện){

//Thực hiện nếu điều kiện đúng }

else{

//Thực hiện nếu điều kiện sai }

Ví dụ - if([ten isEqualToString:@”Nguyen Van B”]){

//Nếu tên là “Nguyen Van B” thì log ra “Day la B”

NSLog(@”Day la B”);

} else{

//Ngược lại log ra “Day khong phai la B”

NSLog(@”Day khong phai la B”);

} - -

Vòng lặp

 Vòng lặp hữu hạn : biết được số lần lặp

for(giá trị biến khởi tạo; điều kiện lặp; bước nhảy sau mỗi lần lặp){

//code }

Đầu tiên khai báo biến khởi tạo gán giá trị khởi tạo, kiểm tra nếu biến khởi tạo thoả mãn điều kiện thì thực hiện các dòng code bên trong thân hàm for, cuối cùng tăng biến khởi tạo theo bước nhảy, nếu không thoả mãn thoát khỏi vòng for và vòng lặp cứ thực hiện như thế đến khi out vòng for

Ví dụ - //Log ra các số tự nhiên từ 1 đến 10

for(int i = 1; i <= 10; i++){

NSLog(@“%d”, i);

} - Ban đầu i = 1, kiểu tra thấy i <= 10 (true), thực hiện log ra giá trị i (1) Sau đó tăng i = i + 1, tương tự như thế lặp lại cho đến khi i = 11, không thỏa mãn điều kiện vòng lặp for nữa Vòng for sẽ dừng lại

 Vòng lặp hữu hạn : duyệt từng đối tượng trong danh sách các đối tượng

Trang 8

[Tự học lập trình iOS từ Cơ Bản – Chuyên Sâu]

NSArray *arr = @[@"2",@"4",@"6",@"8"];

for (NSString *str in arr) { NSLog(@"%@",str);

} - Vòng lặp khai báo một đối tượng str kiểu NSString, duyệt từng đối tượng trong mảng arr, mỗi một lần lặp ->đối tượng trong mảng được duyệt lần lượt lưu tạm trong đối tượng str, làm việc từng đối tượng thông qua str

 Vòng lặp vô hạn

while(điều kiện){

//code } Nếu điều kiện còn thoã mãn là true thì vòng lặp vô hạn, lặp với điều kiện … nếu điều kiện không đúng thì đoạn mã trong vòng lặp sẽ không được thực hiện lần nào

Ví dụ - int a = 0;

while(a!=-1){

NSLog(@”%d”, a);

a++;

} }

sẽ lặp vô hạn, điều kiện luôn đúng vì a có kết quả luôn khác -1 {

Trong trường hợp nếu muốn vòng lặp while thực hiện ít nhất một lần, bất kể điều kiện như thế nào thì ta thực hiện vòng lặp do while

Ví dụ - int a = 6;

do{

NSLog(@”%d”, a);

} while(a < 5);

-

a (6) vẫn được log ra một lần dù không thỏa mãn điều kiện while (a < 5)

Cấu trúc điều khiển với nhiều lựa chọn

Chúng ta có thể sử dụng IF lồng nhau để đưa ra nhiều lựa chọn với nhiều điều kiện khác nhau Tuy nhiên nhìn code sẽ rắc rối khó quản lý, Ở trong Objective C cũng như các ngôn ngữ khác, có hỗ trợ kiểu nhiều lựa chọn

switch(biến){

case [điều kiện 1]:

Trang 9

case [điều kiện 2]:

break;

default:

break;

} Với điều kiện truyền vào, điều kiện sẽ kiểm tra xem nó đúng với case nào sẽ thực hiện các lệnh trong case đó Nếu không đúng với case nào, sẽ thực hiện các dòng lệnh default Và như thế chúng ta có nhiều lựa chọn

Ví dụ - int a = 1;

Ở đây điều kiện truyền vào là a, với a = 1, sẽ thực hiện case 1 : Trả về kết quả “true 1” Full code ví dụ

http://www.mediafire.com/file/f7q3t3p0p6lg4v2/cauTrucDieuKhien%282%29.zip

V Cơ bản về hàm, class trong Objective C

Trong bài viết này, mình sẽ giới thiệu về 1 khái niệm mới “hàm ” và “class” trong Objective C Mình sẽ giúp các bạn biết cách khai báo một hàm, class, cách gọi hàm , gọi class, hiểu về tính chất của class, Cách truyền tham số cho hàm…

Khởi tạo dự án mới đặt tên:

Trang 10

[Tự học lập trình iOS từ Cơ Bản – Chuyên Sâu]

Đầu tiên mình sẽ giới thiệu về hàm trong Objective C : làm việc trên file ViewController.m Cách khai báo hàm tổng quát:

-(void) tenham{

//code thực thi }

 Đơn giản khai báo hàm không có tham số truyền vào

lưu ý: Sau tên Biến phải có dấu cách xong mới đến dấu ‘:‘

-(void) tenham: ([kiểu dữ liệu])tenbien1 nhacnho:([kiểu dữ liệu]tenbien2{

}

Ví dụ : tính tổng a và b - -(void) tong:(int)soA : (int)soB{

int tong = soA + soB;

NSLog(@”%d”, tong);

- }

 Hàm có tham số truyền vào thêm gợi ý chức năng của hàm

-(void) tenham : (kiểu dữ liệu)tenbien goiy: (kiểu dữ liệu) tenbien{

//code }

lưu ý: Sau tên Biến phải có dấu cách xong đến gợi ý mới đến dấu ‘:‘

Ví dụ - -(void) tong: (int)soA Cong: (int)soB{

Trang 11

NSLog(@”%d”, tong);

} - (Gợi ý giúp ta hiểu thêm về chức năng của hàm)

Để gọi hàm trong Objective C

Tổng quát:

[self tênhàm];

Ví dụ

- [self tong:1 Cong:2];

-

Tiếp theo mình sẽ giới thiệu về class trong Objective C

Ở đây mình sẽ giới thiệu các bạn cách khai báo và sử dụng class, mình không đi sâu ý nghĩa class

kế thừa … ngôn ngữ nào ý nghĩa cũng giống nhau 🙂

=>Để tạo một class: newFile -> đặt tên sinhVien kế thừa từ NSObject!

Cách khai báo class

@interface Tênclass : NSObject

@end

NSObject là lớp gốc của hầu hết các Mục tiêu-C phân cấp lớp Qua NSObject , đối tượng thừa kế một giao diện cơ bản cho các hệ thống thời gian chạy và khả năng để hành xử như các đối tượng Objective-C

tại file sinhsinhVien.h

Ví dụ

Trang 12

[Tự học lập trình iOS từ Cơ Bản – Chuyên Sâu]

-

Để khai báo thuộc tính sử dụng từ khoá:

@property kiểudữliệu tên thuộc tính

-(void) tênPhươngThức => đây là thuộc tính bình thường truy xuất thông qua đối tượng gọi đến

thuộc tính của nó

+(void) tênPhươngThức =>đây là thuộc tính tĩnh (static) có thể truy xuất thông qua class gọi đến

thuộc tính, đối tượng gọi đến class

-(instancetype) Hàmkhởitạo: truyền tham số => giống contructor trong java đây là hàm khởi tạo

sẽ được gọi khi tạo một đối tượng có tham số (của 1 class)

-Hàm init (giống contructor trong java) là hàm không tham số, ngay khi tạo một đối tượng hàm

này sẽ được gọi, từ IOS7 trở lên xcode tự tạo hàm không có tham số

get set thuộc tính, IOS7 xcode tự động gen

Ví dụ

-

@interface sinhVien : NSObject

@property int tuoi;

@property NSString *ten,*email;

-(void) thongtin;// ham

+(void) diemSV;// hàm static

-(instancetype)initSinhVien:(NSString*)tenSV :(int)tuoiSV :(NSString*)email;

@end

- tại file sinhvien.m thêm đoạn mã sau để viết code cho hàm init , hàm get set,hàm phương thức

Ví dụ

- // sinh ra bien the hien va sinh ra get set!mac dinh duoc ta ra

// contructor co tham so!

-(instancetype)initSinhVien:(NSString*)tenSV : (int)tuoiSV :(NSString *) email{

Trang 13

Vào file ViewController.h

-

#import "sinhVien.h"

- Vào file ViewController.m trong -(void)viewDidLoad{} thêm đoạn mã:

-

- (void)viewDidLoad {

// khai báo đối tượng không có tham số

sinhVien *sv=[[sinhVien alloc]init];

Ngay lật tức init không tham số được gọi và log ra “init” Tiếp theo set các giá trị thuộc tính cho đối tượng NSLog ra thông tin sv Cuối cùng gọi đến 2 phương thức của đối tượng: phương thức bình thường [sv thongTin], phương thức (static) [sinhVien diemSV]

Kết quả:

- init

tên:binh, tuổi:22, email: maibinhpro

thong tin

diem sinh viên

- Tạo một đối tượng có tham số:

-(void)viewDidLoad{} thêm đoạn mã:

- //khai báo đối tượng có tham sô

sinhVien *sv1=[[sinhVien alloc]initSinhVien:@"dat" :23 :@"maidat"];

NSLog(@"tên:%@, tuổi:%d, email: %@",[sv1 ten],[sv1 tuoi],[sv1 email]);

[sinhVien diemSV];

[sv1 thongtin];

- Ngay lật tức init có tham số được gọi Và tự set các giá trị cho thuộc tính của đối tượng NSLog ra

Trang 14

[Tự học lập trình iOS từ Cơ Bản – Chuyên Sâu]

- tên:dat, tuổi:23, email: maidat

diem sinh viên

thong tin

- Full link code : http://www.mediafire.com/download/ot6f3ssa9d7wr6b/functionClassBlock.zip

VI Hướng dẫn cách sử dụng block trong Objective C

1 Sơ lược về Objective C

Như chúng ta đã biết một biến có thể lưu một giá trị, một đối tượng có bao gồm các thuộc tính, phương thức… Tuyệt vời! Block hỗ trợ chúng ta lưu một đoạn code sẽ được sử dụng, tương tác nhiều lần Bài này mình sẽ giúp các bạn tìm hiểu về Objective C

Khai báo block Định nghĩa block Truy vấn block, và tính chất block

Ứng dụng block Đầu tiên khởi tạo dự án mới:

Ta làm việc trên file ViewController.m -

- (void)viewDidLoad { [super viewDidLoad];

// Do any additional setup after loading the view, typically from a }

-

 Đầu tiên Cách khai báo một block

Một block khai báo tổng quát:

kiểu dữ liệu trả về (^tên block)(kiểu dữ liệu 1,kiểu dữ liệu 2,kiểu dữ liệu 3);

Trang 15

Kiểu trả về “void”, tên block “_in”, không tham số truyền vào “( )”

- void (^_in)();

- +) block một tham số:

Kiểu trả về “int”, tên block “myBlock”, 1 tham số truyền vào “( int)”

- int (^myBlock)(int);

- +) block nhiều tham số truyền vào:

Kiểu trả về “void”, tên block “myBlock”, 2 tham số truyền vào “( int,int)”

- //block nhiều tham số

void (^inSo)(int,int);//khai báo -

 Định nghĩa block

Định nghĩa block tổng quát:

- blockX=^(tham số1, tham số2 , tham số3){code};

-

Ví dụ block _in : đơn giản ta chỉ log chuỗi

- _in=^(){

NSLog(@"infor");

};

- block myBlock: truyền vào tham số “num”, log ra thông tin “num”, và trả về giá trị num - myBlock= ^(int num){//định nghĩa

NSLog(@"%d",num);

return num;

};

- block inSo: truyền vào 2 tham số “soA” “soB”, tính tổng và log ra giá trị tổng

- inSo=^(int soA,int SoB){//định nghĩa

-

Ví dụ

Trang 16

[Tự học lập trình iOS từ Cơ Bản – Chuyên Sâu]

- block myBlock:

- myBlock(7); //kết quả 7

- block inSo:

- inSo(6,4); //kết quả 10

- Thêm đoạn mã sau:

- int i=100; //lấy được giá trị của biến bên ngoài hàm!!!

ở đây trong block không truyền tham số biến i vào nhưng ta vẫn sử dụng biến i được !!!

Tính chất rất tuyệt vời của block custom (block lấy được các biến địa phương ngay trước

khi khai báo đó)

khi chạy cho kết quả: 100

- int i=100; //lấy được giá trị của biến bên ngoài hàm!!!

-

gán lại giá trị biến i=200 tuy thế khi gọi block kết quả vẫn trả về :100

như thế block chỉ tham chiếu giá trị chứ k tham chiếu ô nhớ

 Ứng dụng block

Các bạn đã làm quen với block cách khai báo, định nghĩa , truy vấn Ở đây mình đưa ra một ví dụ về cách áp dụng block :

Ví dụ - -(int) addInfor: (int)intX{

intX=6;

NSLog(@"so:%ld",(long)intX);

return intX;

} - Gọi hàm:

- int soA;

[self addInfor:[self addInfor:soA]];

-

khi đó hàm luôn trả về : so:6

Trang 17

Tính chất lưu lại giá trị trên hàm chỉ lưu được 1 giá trị của kiểu dữ liệu trả về ,trên block được ứng dụng rất nhiều lưu trữ nhiều kiểu giá trị khác nhau!

 Cách truyền block vào hàm

Tổng quát:

–(void) tên hàm : (kiểu dữ liệu)tên biến1 : (kiểu dữ liệu)tên biến2 :block –(void) tên hàm : (kiểu dữ liệu)tên biến1 : (kiểu dữ liệu)tên biến2 : (kiểu trả về block (^)(kiểu dữ liệu A ,kiểu dữ liệu B)) Tên block;

Ví dụ - -(void) add:(NSString*)name :(int)age :(void (^)(NSInteger diem,NSString

Thêm đoạn mã sau trong viewDidLoad:

Đây là đoạn code mã nguồn cho block:

- // ứng dụng block

[self add:@"binh" :22 :^(NSInteger diem, NSString *monHoc, NSError *error) { NSLog(@"%@,%ld",monHoc,(long)diem);

}];

-

=> Khi đó các tham số block đã lưu lại thông tin! Ta gọi tham số ra và làm việc !!!

Ở đây là một ví dụ đơn giản, trong thực tế ta khai báo các block để lưu lại thông tin các tham số và dùng các tham số định nghĩa lại block để làm việc với tham số!

Ví dụ load API truyện về ta cần lưu lại thông tin số cuốn sách, tên sách… định nghĩa block gồm các thông tin trên Khi đó đối với từng hàm ta gọi block trên, và định nghĩa nghĩa block tuỳ mục đích sử dụng với các thông tin block cung cấp

Link full code : http://www.mediafire.com/download/cgkgo8otu5imss6/blockCoBan.zip

VII Cấu trúc của một chương trình trong lập trình IOS

Các thành phần cơ bản của một app ios :

–file h gồm :@interface khai báo : biến , fun ,class ,protocol…

–file m: @implementation: thực thi

1 Tổng quan:

Trang 18

[Tự học lập trình iOS từ Cơ Bản – Chuyên Sâu]

FILE: AppDelegate: Mình đã commen các hàm cơ bản trong Appdelegate nội dung các hàm ý nghĩa như sau:

- // bắt đầu chạy khi app gọi

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch

return YES;

}// sẽ chạy sau Didview

- (void)applicationWillResignActive:(UIApplication *)application { // Sent when the application is about to move from active to inactive state This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates Games should use this method to pause the game

} // chạy khi app chạy ở chế độ nền

- (void)applicationDidEnterBackground:(UIApplication *)application { // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it

is terminated later

// If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits

} // chạy khi app sẽ chạy ở chế độ nền

- (void)applicationWillEnterForeground:(UIApplication *)application { // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background

} // khi app hoàn thành

- (void)applicationDidBecomeActive:(UIApplication *)application { // Restart any tasks that were paused (or not yet started) while the application was inactive

If the application was previously in the background, optionally refresh the user interface }

-

Trang 19

Gồm các viewcontroller các màn hình, các cảnh trong app , nơi thiết kế giao diện

Thông tin app- cấu hình app

-FILE: Supporting Files

Chứa main app

2 Nguyên lý chạy cơ bản

Main khởi tạo chạy ứng dụng-> thông tin cấu hình app cho phép-> khởi tạo màn hình khởi động-> gọi đến appdelegate khởi tạo hàm bắt đầu chạy trong app-> sau đó chạy các hàm thực thi viewcontroller

VIII Tạo ứng dụng Helloworld sử dụng Objective C (tạo ứng dụng Iphone đầu tiên trên iOS)

Đối với bất kỳ ngôn ngữ nào ta cũng làm quen với hello world, mình cũng giới thiệu cụ thể hello world trong IOS cơ bản! sử dụng Objective C

Mục tiêu hiển thị ra thông báo: Helllo World mà bất kỳ ngôn ngữ nào cũng học qua!

1 Khởi tạo một dự án mới

Trang 20

[Tự học lập trình iOS từ Cơ Bản – Chuyên Sâu]

– Xcode cho bạn thấy mẫu dự án khác nhau để lựa chọn Đối với ứng dụng đầu tiên của bạn, chọn “Single Xem Application” và nhấp “Next”

Product Name : HelloWorld – tên ứng dụng

Organization Name : – Tên cá nhân hoặc tên công ty

Organization Identifine : – định danh viết tắc tên công ty hoặc tên cá nhân

Device : chọn tên thiết bị

Trang 21

Chọn next-> chọn thư mục lưu->create =>như thế chúng ta đã tạo file thành công

2 Bắt đầu viết app “HelloWourld”

-Vào main.StoryBoard Lúc đầu màn hình không có gì!

– Kéo “button” vào đổi text “helloWorld”, chọn vào button và chọn vào background chọn

Trang 22

[Tự học lập trình iOS từ Cơ Bản – Chuyên Sâu]

Chọn vào biểu tượng có 2 cái vòng tròn!

– click vào button , và giữ CTRL kéo sang, đặt tên helloWorld chọn Action,touchUpInside bắt

sự kiện click vào button

Trang 23

3 Bắt đầu code nào

Khởi tạo đối tượng helloWorld truyền tham số vào : Tiêu đề, thông báo, delegate, Cancel trở lại, thông tin hiển thị thêm, OtherButtonTitles

Trong viewDidLoad - UIAlertView *helloWorld=[[UIAlertView alloc] initWithTitle:@"hello"message:@"helloWorld" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil];

// lúc này helloWolrd đã đc tạo để chạy ta gọi hàm "show"

[helloWorld show];

- – Biên dịch và chạy thử ta được kết quả như hình sau:

Trang 24

[Tự học lập trình iOS từ Cơ Bản – Chuyên Sâu]

Click vào nút button sẽ đưa ra thông báo:

IX Tìm hiểu về Label, Button, TextField, Slider, Switch, Page Control trong iOS

Trang 25

UI cơ bản của lập trình di động IOS Label, Button, TextField, Slider, Switch, Page Control cách khai báo, cách sử dụng, ứng dụng thực tế của các UI trong App

Sau đây mình sẽ giới thiệu cho các bạn từng UI cụ thể!

Ta cần tạo dự án mới, đặt tên:

1 Đầu tiên mình sẽ giới thiệu về Label, Button, TextField trong IOS

Label là gì? label là nhãn chứa thông tin về text, trang trí text, thường dùng để thông báo thông tin, trang trí màn hình

Button là gì? button là một nút, sau khi nhấn vào nút đó sẽ thực một số công việc gì đó, đoạn code nào đó

TextField là gì? là một ô nhập liệu cho phép nhập dữ liệu từ bạn phím vào ô đó, và cho phép lấy dữ liệu từ ô để thực hiện các tác vụ khác

Để cho các bạn dễ hình dung mình sẽ lấy một ví dụ cụ thể sau:

Mình tạo ra 2 ô nhập liệu(TextField) , nhập dữ liệu từ bàn phím, một nút(button) để thực hiện cộng 2 số nhập từ bàn phím, một label hiển thị kết quả tổng của 2 số

Thiết kế giao diện đơn giản như sau label đổi text=0, button đổi text=0, và 2 ô text Field

Ánh xạ UI sang class quản lý: tạo file ViewController.h, Giữ CTRL và kéo lần lượt label, textField để kiểu Outlet chỉ thuộc tính label và textField và đặt tên:

Trang 26

[Tự học lập trình iOS từ Cơ Bản – Chuyên Sâu]

Riêng button Cộng ta để kiểu action:

Sau khi ánh xạ và đặt tên ta sẽ được như trông như sau:

- -

@interface ViewController : UIViewController

@property (weak, nonatomic) IBOutlet UILabel *labelResult;

- (IBAction)buttonCong:(id)sender;

@end

-

Ta thực thi bên file ViewController.m

Ta thêm đoạn mã sau trong buttonCong:

soA=[self.textfieldSoA.text intValue]; lấy dữ liệu từ ô nhập thứ nhất chuyến đổi kiểu sang

intValue, số mới có khả năng tính toán Tương tự với soB

Lưu ý: Trong ios nếu kiểu dữ liệu nhập vào ô textField là không thể chuyển sang kiểu số thì gán =0 giá trị mặc định khi không thể chuyển đổi được

tong=soA+soB; gán tổng bằng tổng 2 số vừa lấy ra Định dạng lại kết quả kiểu NSString, kiểu text mới có thể đưa dữ liệu lên label, đưa dữ liệu lên label

2 Tiếp theo mình giới thiệu cho các bạn về Slider

Slider là gì? là môt thanh có con trỏ cho phép tuỳ chỉnh một miền dữ liệu trên thanh Thường ứng dụng như tinh chỉnh ánh sáng, màu sắc, độ trong suốt…

ví dụ: Ta có một thanh slider và một label trả về miền giá trị, khi ta kéo con trỏ trên thanh slider:

Ta thiết kế trên ViewControler ví dụ trước :

ta thêm slider và cho con trỏ vào chính giữa

Trang 27

Ta thêm label và đổi text thành 0.500000, đơn giản bởi ta cho con trỏ ở chính giữa, miền ta cho chạy

Ánh xạ tương tự như ví dụ trên và đặt tên ta cần thuộc tính để lấy data từ con trỏ và action

để cho phép lấy dữ liệu khi di chuyển con trỏ

-

- (IBAction)sliderbarChange:(id)sender;

Trang 28

[Tự học lập trình iOS từ Cơ Bản – Chuyên Sâu]

-

- (IBAction)sliderbarChange:(id)sender { UISlider *slider=(UISlider*) sender;

self.labelSliderBar.text=[[NSString alloc]initWithFormat:@"%f",slider.value];

} - khi ta di con trỏ giá trị con trỏ lưu trong value, sẽ hiện thị trên label Sliderbar

Tuỳ từng ứng dụng mà ta lấy miền giá trị truyền vào!

3 Stepper

Stepper là gì? stepper bao gồm 2 nút + và – là một thanh dữ liệu min max, thanh này sẽ nhảy bậc theo bậc ta quy định khác slider ở chỗ slider miền liên tục, stepper tăng giảm rời rạc, ứng dụng như tăng giảm âm thanh…

Ví dụ

Ta có một Stepper, và label hiển thị kết quả khi tăng giảm

Ánh xạ Stepper: thuộc tính để lấy giá trị stepper, action để mỗi lần thay đổi ta lấy được giá trị thay đổi

-

@property (weak, nonatomic) IBOutlet UIStepper *stepper;

- (IBAction)step:(id)sender;

- ánh xạ label gán giá trị =0 để hiển thị kết quả stepper :

-

@property (weak, nonatomic) IBOutlet UILabel *labelSliderBar;

Trang 29

Thực thi thêm đoạn mã sau:

-

- (void)viewDidLoad { [super viewDidLoad];

self.stepper.stepValue=2;

self.stepper.minimumValue=-2;

self.stepper.maximumValue= 51;

- bước nhảy mỗi lần nhấn vào + or - giá trị min=-2, max= 51;

-

- (IBAction)step:(id)sender { double number=[self.stepper value];

self.labelStepper.text=[[NSString alloc]initWithFormat:@"%f",number ];

} - [ self.stepper value] lấy ra giá trị của stepper hiện tại

=> sau đó đưa lên label

như vậy mình đã hướng dẫn cơ bản một số UI cơ bản!

Link full code : http://www.mediafire.com/file/t7d2d54u6xnivhc/UICoBan.zip

X Tìm hiểu về Progress View, Activity View, Segmented Control, Switch trong ios

Tiếp tục giới thiệu, cách dùng, và dùng các Control trên.!

Tạo một dự án mới và đặt tên:

Đầu tiên mình thiết kế giao diện chung như hình sau:

Trang 30

[Tự học lập trình iOS từ Cơ Bản – Chuyên Sâu]

Bao gồm:Progress View, Activity View, Segmented Control, Switch kéo thả từ tập các danh sách UI:

Segmented Control:

Chúng ta có thể đổi số lượng segments , lựa chọn từng segment và thay đổi tiêu đề (title) cho từng segment tuỳ ứng dụng của mình

Đối với segment chúng ta khai báo: Property để lựa chọn đang sử dụng segment nào, và action

để lọc thông tin tuỳ theo từng segment

Ứng dụng chủ yếu là để lọc thông tin như messager chẳng hạn.!

Khai báo một label đổi text=”Filter Friend” Dùng để hiển thị nội dung segment khi ta lọc thông

tin

Progress View: có thể thay đổi vị trí thanh màu xanh progress

Trang 31

Dùng để tăng giảm theo bước nhảy trong khoảng Min Max, Tuy nhiên nó biểu biễn cụ thể trực quan hơn Stepper, và nó cũng rời rạc chứ không liên tục như Slider

Ở đây mình thêm 2 button là + – dùng để tăng giảm Progress Progress chỉ sử dụng Property để thay đổi khung màu xanh chạy cho tới khi full

Ứng dụng: Sử dụng khi biết chính xác thời gian load dữ liệu Ngược lại vớiActivity là cứ quay khi nào load dữ liệu thành công thì dừng quay

Switch: Sử dụng rất đơn giản chỉ có 2 trạng thái ON or OFF Nếu on thì làm gì đó off thì dừng việc

đó lại Sử dụng khi bật tắt chức năng gì đó hoặc cho phép hay không cho phép sử dụng ứng dụng, trong setting Iphone sử dụng rất nhiều Khai báo property để lựa chọn on or off

Activity View: Đơn giản là nếu chúng ta cho phép quay thì quay, tắt thì nó sẽ dừng quay, sử dụng

rất nhiều khi load data mà không biết khi nào xong, chưa load xong thì nó sẽ quay, và ngay khi lấy được data thì sẽ dừng quay

Thiết kế Ứng dụng hoạt động theo nguyên lý như sau:

– Khi chọn vào segment thì label sẽ hiển thị nội dung lọc

– Khi nhấn vào cộng trừ thì progress tăng giảm

– Khi chọn vào ON thì Activity quay, OFF thì activity dừng quay

Kết nối UI với class ViewController.h quản lý:

Giữ Ctrl vào kéo vào class quản lý và đặt tên:

Sau khi ánh xạ và đặt tên ta được đoạn mã:

-

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController

@property (strong, nonatomic) IBOutlet UIActivityIndicatorView *activity;

- (IBAction)switchActivity:(id)sender;

@property (strong, nonatomic) IBOutlet UISwitch *switchControl;

@property (strong, nonatomic) IBOutlet UIProgressView *progressView;

Trang 32

[Tự học lập trình iOS từ Cơ Bản – Chuyên Sâu]

Thực thi các UI đã khai báo trong ViewController.m:

Segmented Control:

Lựa chọn:

– Nếu segmented=0, thì lọc ra friend online

– Nếu segmented=1, thì lọc ra friend all

Progress View:( min =0 , max =1)

– Tăng : mỗi lần nhấn vào nút cộng thì tăng lên o.1

– Giảm : mỗi lần nhấn vào nút trừ thì giảm đi 0.1

XI Quản lý bộ nhớ trong IOS (Memory Management)

Một vấn đề rất được quan tâm trong lập trình ios là quản lý bộ nhớ (Memory Management), chắc các bạn cũng từng đặt câu hỏi là vì sao phần mềm Iphone, Mac os, IPad… chạy rất mượt sau một thời gian dài sử dụng Đó là sự khác biệt rất tuyệt vời.Đối với các ngôn ngữ, Android , Windows phone… quản lý bộ nhớ, giải phóng bộ nhớ, thu rọn rác hoàn toàn tự động

Trang 33

Manual Reference Counting (MRC) : quản lý bộ nhớ thủ công, có nghĩa là chúng ta sẽ tự

quản lý bộ nhớ bằng cách đánh dấu, theo vết vòng đời của object Cụ thể là ta sẽ đếm việc khởi tạo, sử dụng và giải phóng object trong chương trình

Autiomatic Reference Counting (ARC) : quản lý bộ nhớ tự động, hệ thống sẽ dùng bộ đếm

tương tự như MRC nhưng nó sẽ thêm vào phương thức quản lý bộ nhớ tự động tại thời điểm compile

Garbage Collection (GC) : hệ thống sẽ tự động lưu vết và tự động giải phóng vùng nhớ của

object không cần thiết nữa Nó sử dụng kỹ thuật quản lý bộ nhớ khác với MRC và ARC, tuy nhiên GC chỉ hỗ trợ Mac OS X mà không hỗ trợ iOS

IOS bây giờ sử dụng trình ARC để giải phóng bộ nhớ, và rọn rác Tuy nhiên chúng ta vẫn quản

lý từng biến thuộc tính cho phép tham chiếu đến đối tượng như thế nào? khi nào được phép giải phóng? …

2 Quản lý bộ nhớ đối với biến:

Trước khi đi vào cụ thể mình có lưu ý một số thuật ngữ sau tiện cho sử dụng

Lưu ý:

1 Trỏ đến = tham chiếu đến

2 Sở hữu đối tượng = có quyền quyết định đến sự tồn tại của đối tượng

Strong trỏ đến đối tượng và có quyền sở hữu đối tượng, nghĩa là có quyền quyết định đến sự tồn tại của đối tượng

– Mặc định là strong: Khi bị gán mới nghĩa là trỏ đến đối tượng mới thì ô nhớ chứa đối

Arr=@[@(10)]; Arr trỏ đến vùng nhớ chứa giá trị @[@(10)] dẫn tới vùng nhớ chứa giá trị

@[@(1)] không có ai trỏ tới và sẽ bị giải phóng

=>Ngay lật tức vùng nhớ cũ bị ARC giải phóng

kết quả: Arr=10

– Đối với strong gán bằng strong :

- // biến kiểu strong gán strong

strong NSArray *Arr1=@[@(1)];

strong NSArray *Arr2=Arr1;// gán và cả 2 mảng cùng trỏ đến 1 vùng nhớ!!! quyền sở hữu như nhau

Arr1=@[@(10)];// thay đổi vùng nhớ cho Arr1 tuy nhiên thằng Arr2 vẫn trỏ đến, vùng nhớ cũ vẫn tồn tại

NSLog(@"%@",Arr2);

Trang 34

[Tự học lập trình iOS từ Cơ Bản – Chuyên Sâu]

Arr2=Arr1 => Arr2 trỏ đến cùng vùng nhớ của đối tượng Arr1 trỏ với, và cũng có quyền sở hữu như nhau Vì thế khi gán lại Arr1=@[(10)] vùng nhớ cũ không bị giải phóng

Kết quả Arr2=1;

-Đối với weak gán bằng strong:

Weak trỏ tới đối tượng , nhưng không có quyền sở hữu đến đối tượng, nghĩa là không có quyền quyết định đến sự tồn tại của đối tượng

thêm đoạn mã sau:

- // kiểu weak gán strong

strong NSArray *Arr3=@[@(1)];

weak NSArray *Arr4=Arr3;// Arr4 trỏ vào vùng nhớ của Arr3, phụ thuộc Arr3 khi vùng nhớ Arr3 bị xoá thì Arr4 nil

weak Arr4 = Arr3 => Arr 4 trỏ đến cùng vùng nhớ của đối tượng Arr3, nhưng không có quyền

sở hữu vùng nhớ đó, chỉ tham chiếu gián tiếp thông qua Arr3

Khi Arr3=@[@(10)]; thì Arr3 trỏ đến vùng nhớ chứa đối tượng mới, mà Arr3 có quyền sở hữu vùng nhớ cũ dẫn tới vùng nhớ cũ bị giải phóng , dẫn tới Arr4=nil rỗng

kết quả Arr4=nil;

unsafe_unretained: unsafe_unretained luôn trỏ về vùng nhớ cũ.khi vùng nhớ bị giải phóng

nó vẫn trỏ đến vùng nhớ giải phóng, có thể dẫn đến crash chương trình khi vùng nhớ bị xoá

Tuy nhiên :giải phóng không có nghĩa là vùng nhớ bị xoá như kiểu thùng rác quản lý trong

máy tính lưu lại một thời gian sau đó mới xóa

Kiểu gán này không làm tăng vùng nhớ, dùng gán biến tạm

- strong NSArray *Arr5=@[@(1)];

unsafe_unretained NSArray *Arr6=Arr5;

Arr5=@[@(10)];

NSLog(@"%@",Arr6);

- Thằng Arr6 luôn trỏ về vùng nhớ cũ của Arr5 cho dù Arr5 đã giải phóng vùng nhớ cũ

May mắn kết quả: Arr6=1

Tuy nhiên nếu để một thời gian không sử dụng biến này có thể gây crash chương trình do vùng nhớ đã được giải phóng lưu lại trong thùng rác mà chưa bị xoá, sau một thời gian đầy thùng rác bị xoá thì gây crash chương trình

3 Quản lý vùng nhớ đối với property :

Trang 35

nonatomic: Không độc quyền nghĩa là rất nhiều thread cùng một thời điểm có thể thay đổi

giá trị thuộc tính, dẫn tới không an toàn

Lưu ý:Nếu chỉ có 1 luồng truy cập vào biến thì tốc độ nhanh

atomic (default): Độc quyền, nghĩa là nhiều thread cùng truy cập thì thread này gán giá trị

chỉnh sửa xong mới cho phép thread khác sử dụng biến đó để chỉnh sửa

Lưu ý:Truy cập chậm hơn nonatomic nếu chỉ có 1 luồng do có cơ chế khóa mặc định khi có nhiều luồng truy cập!

Tính cho phép đọc ghi dữ liệu vào thuộc tính Property: (IVar đọc ghi bình thường)

readwrite (default): cho phép đọc, ghi vào thuộc tính

readonly : chỉ cho phép đọc, không cho phép ghi (set),”các biến thể hiện vẫn đọc ghi bình

thường”

Thay đổi tên mặc định cho hàm get, set Property:

Do tên set get thường là tính từ, thuộc tính là danh từ, or ta muốn quản lý lại get set, nên ta cần nhu cầu thay đổi tên get set mặc định

@property(assign,getter=isAge,setter=setIsAge:) int age; sử dụng “getter = tên getter mới”,

“setter=tên setter mới:”

Quản lý bộ nhớ đối với thuộc tính đối tượng

Đối với thuộc tính là kiểu đối tượng trong Objective C:

Lưu ý: nhắc lại

1 Trỏ đến = tham chiếu đến

2 Sở hữu đối tượng = có quyền quyết định đến sự tồn tại của đối tượng

3 Strong pointer và weak pointer đề cập đến việc tham chiếu mạnh hay yếu tới object

Strong pointer: là một con trỏ, trỏ đến một đối tượng và sở hữu (own) đối tượng đó biến

iVar sẽ là weak pointer

Weak pointer: là một con trỏ, trỏ đến một đối tượng nhưng không sở hữu (own) đối tượng

đó.weak thường đi kèm với một đối tượng kiểu strong.” biến iVar sẽ là strong pointer, tương đương với retain

Ví vụ minh họa: Ta khai báo một class sinhVien như sau:

-

@interface sinhVien : NSObject

@property(strong,nonatomic) NSArray *model;

-(void) infor;

@end - Thực thi hàm infor:

- -

@implementation sinhVien -(void) infor{

Trang 36

[Tự học lập trình iOS từ Cơ Bản – Chuyên Sâu]

arr=nil;

NSLog(@"strong : %@",self.model);

}

@end - Tương tự kiểu strong trong biến mà mình đã giải thích ở trên: kết quả model=0 có cùng quyền sở hữu do tham chiếu mạnh

nếu ta thay đổi strong thành weak

-

@property(weak,nonatomic) NSArray *model;

- khi đó model=nil do tham chiếu yếu không có quyền sở hữu đối tượng Tương tự như weak trong biến mà mình đã giải thích ở trên

unsafe_unretained: Tương tự unsafe_unretained trong biến, Dùng cho kiểu thuộc tính là đối

tượng

Copy:

copy: cố gắng copy khi property được gán

copy là sao chép toàn bộ đối tượng của property được gán! xong lưu đối tượng đó vào vùng nhớ mới

Copy phát huy tác dụng khi muốn tạo một bản sao rồi chỉnh sửa mà không ảnh hưởng đến đối tượng cũ Sử dụng chủ yếu NSMutableDictionary, NSMutableString, NSMutableArray, lấy bản sao dữ liệu rồi tuỳ chỉnh

Ví dụ sau:

-

@interface sinhVien : NSObject

@property(copy,nonatomic) NSMutableArray *model;

-(void) infor;

@end - Thực thi hàm infor:

-

@implementation sinhVien -(void) infor{

NSMutableArray *arr=@[@(0)];

Đối với thuộc tính là kiểu nguyên thủy trong C:

Assign(default): trỏ vào ô nhớ tương tự như unsafe_unretained, tuy nhiên dùng nhẹ nhàng

hơn rất nhiều, vì nó dùng cho kiểu nguyên thủy C

Trang 37

Chú ý: kiểu nguyên thủy C khi khai báo luôn trỏ vào một vùng nhớ mà không bị thay đổi vùng nhớ, chỉ tham chiếu giá trị cho biến chính vì thế Assign mới phát huy được ưu điểm là trỏ vào một vùng nhớ

XII Điều hướng sử dụng Navigation controller

Ở bài này mình sẽ hướng dẫn cho các bạn về cách điều hướng các màn hình tuỳ chỉnh theo nhu cầu ứng dụng của các bạn Hướng dẫn cụ thể về Navigation Navigation là gì ? …

Navigation là một trong phong cách chuyển tiếp sử dụng rất phổ biến trong ứng dụng IOS, Giống như vào lâu đài chỉ có một lối đi và phải qua nhiều cách cửa sau mỗi cánh cửa là một thế giới khác nhau!, chúng ta muốn quay lại một thế giới,hay đi tiếp đều phải qua các cửa trên mội lối đi

đó Như thế Navigation là các cách cửa giúp ta vào các thế giới khác nhau, Ở trong IOS nó là các điều hướng NEXT or BACK để mở ra các màn hình khác nhau 🙂

Để cụ thể hơn, trong Setting Iphone khi ta cài ứng dụng thì nó luôn có danh sách các ứng dụng, click vào sẽ mở ra chi tiết thông tin của ứng dụng đó, khi back lại quay lại list ứng dụng đó chính

là navigation

Bắt đầu cụ thể nào :

Khởi tạo project mới đặt tên:

Mình sẽ thiết kế ứng dụng với nội dung sau :

Sau khi thiết kế nó sẽ trông như thế này :

Trang 38

[Tự học lập trình iOS từ Cơ Bản – Chuyên Sâu]

– ViewController 1: Danh sách ảnh và thông tin về ảnh đó!

– ViewController 1: Khi click vào một ảnh thì ảnh sẽ chuyển sang chế độ xem lớn hơn, và hiển thị thông tin về ảnh

Thiết kế giao diện: Vào Main.storyboard!

Kéo vào thêm một ViewController :

– Đối với ViewController 1:

Kéo vào một TabelView, và một TableViewCell Thêm imageView ể hiển thị ảnh ở dạng list, và một label để hiển thị thông tin ảnh!, thay đổi màu nền cho ViewController

=> Sau khi căn chỉnh ta sẽ trông như thế này:

Trang 40

[Tự học lập trình iOS từ Cơ Bản – Chuyên Sâu]

Link tải ảnh : http://www.mediafire.com/download/qbi32hamm5vgpmb/Archive.zip

Sau khi tải ảnh về , giải nén ra và kéo vào dự án:

Ngày đăng: 14/08/2017, 14:11

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w