Objective-C知識總結(1),objective-c知識總結
Objective-C簡稱OC,是一款可以開發Mac OS X平台和iOS平台應用程式的開發語言,目前最新的swift語言也可以開發以上兩平台的應用。
OC是面對對象的語言(OC面對對象語言特性請看之前的部落格--->也可以點我!<---),在OC代碼可以混入C語言代碼,甚至是C++代碼,也可以和swift進行混編。
好了,簡介就說這麼多>_<
先來個小問題:為什麼OC要使用import引入標頭檔,import和include的區別?
include 和 import 都是引入標頭檔
import引入的標頭檔,可以防止重複包含
include它是使用預先處理指令防止重複包含,如果沒有寫預先處理指令,則無法防止重複包含問題
還記得怎麼使用預先處理指令防止重複包含嘛
#ifndef Zhy#define Zhy// 函數的聲明void test(); #endif
使用NSLog輸出內建換行
NSLog(@"Hello World!");
OC中相對C語言多了一個BOOL類型用來儲存邏輯值,YES(真 1) NO(假 0)
OC中的異常捕捉機制
@try { // 有可能會出錯的代碼 <#Code that can potentially throw an exception#> } @catch (NSException *exception) { // 錯誤的處理方法 <#Handle an exception thrown in the @try block#> NSLog(@" %@ ",exception); // 列印出錯誤的資訊 } @finally { // 無論是否有錯都會執行 <#Code that gets executed whether or not an exception is thrown#> }
OC中類的建立以及在哪裡定義成員變數,類方法和對象方法的聲明和實現
// 人這個類的聲明@interface Person : NSObject{ // 成員變數 NSString *_name; int _age;}// 對象方法的聲明- (void)duixiangfangfa;// 類方法的聲明+ (void)leifangfa;@end// 人這個類的實現@implementation Person// 對象方法的實現- (void)duixiangfangfa{ NSLog(@"這是對象方法的實現");}// 類方法的實現+ (void)leifangfa{ NSLog(@"這是類方法的實現");}@end
說一下建立對象的語句
Person *p = [Person new];
[Person new] 做了三件事情
小問題:申請的空間在記憶體的哪個區?
new 的時候申請的空間在記憶體的堆區(程式動態分配的記憶體空間)
執行個體變數儲存在堆區,指標p儲存在棧區,對象方法儲存在代碼區
堆區有一個_isa指標指向代碼區,當對象要調用方法時,首先找p對應的堆區的空間,然後找到 _isa指標,再找到_isa指向的代碼區的空間,然後到該空間中找 方法
設計一個”學生“類
1> 成員變數
* 姓名
* 生日
1 #import <Foundation/Foundation.h> 2 // 日期的結構體 3 typedef struct { 4 5 // 年 6 int year; 7 // 月 8 int month; 9 // 日10 int day;11 12 }MyDate;13 14 // Student類的聲明15 @interface Student : NSObject16 {17 @public18 // 學生姓名19 NSString *_name;20 21 // 學生生日22 MyDate _birthday; // 結構體變數23 }24 25 @end26 27 28 // Student類的實現29 @implementation Student30 31 @end32 33 34 int main(int argc, const char * argv[]) {35 @autoreleasepool {36 37 Student *stu = [Student new];38 stu->_name = @"阿衰";39 40 //第一種方法41 stu->_birthday =(MyDate){1983,12,12};42 //NSLog(@"%d,%d,%d",stu->_birthday.year,stu->_birthday.month,stu->_birthday.day);43 44 //第二種方法:定義一個結構體變數45 MyDate d1 = {1981,11,11}; //定義結構體變數的同時進行初始化46 stu->_birthday = d1;47 48 //第三種方法,逐個賦值49 stu->_birthday.year = 2014;50 stu->_birthday.month = 12;51 stu->_birthday.day = 11;52 53 NSLog(@"%d,%d,%d",stu->_birthday.year,stu->_birthday.month,stu->_birthday.day);54 }55 return 0;56 }
這裡主要說明的是調用結構體時的方法
NSString類的用法
NSString是OC中字串處理的類
NSString *s = @"zzzzzzzzzzzzzz "; NSString *s1 = [NSString stringWithFormat:@"%d",i];
NSString字串的長度
NSString *s1 = @"zzz"; NSUInteger len = [s1 length]; // 3// 中文字元在NSString中也佔1個位元組