你好,歡迎來到IOS教程網

 Ios教程網 >> IOS基礎知識 >> IOS基礎知識 >> iOS基礎學習總結(OC基礎總結)

iOS基礎學習總結(OC基礎總結)

編輯:IOS基礎知識

1.OC基本語法

1.手動編譯鏈接的方法:cc -c xx.m cc main.o - framework Foundation

2.實際上BOOL類型的變量:是1個有符號的char變量.

3.面向過程與面向對象:

面向過程:在遇到1個需求的時候,實現這個需求的每1個步驟都是自己寫代碼親自的去一步步的實現.這樣的解決問題的方式我們就叫做面向過程的方式.

面向對象:在遇到1個需求的時候,不要親自去實現而是找1個專門做這件事情的人來幫助我們搞定.這樣的解決問題的方式就叫做面向對象的解決方式.

 

面向對象的解決問題的優點:後期的維護和修改十分方便.   4.對象:對象是現實生活中的1個具體存在.看得見、摸的著.拿過來就可以直接使用.

類:類是對一群具有相同特征或者行為的事物的1個統稱.抽象的.不能直接使用.

5.內存中的五大區域.

棧 存儲局部變量.

堆 程序員手動申請的字節空間 malloc calloc realloc函數.

BSS段存儲未被初始化的全局變量靜態變量.

數據段(常量區)存儲已被初始化的全局靜態變量常量數據.

代碼段存儲代碼.存儲程序的代碼.

6.類加載:在程序運行期間當某個類第1次被訪問到的時候.會將這個類存儲到內存中的代碼段區域.這個過程叫做類加載.

7.分組導航標記: #pragma mark分組名 #pragma mark - #pragma mark -分組名

 

8.數據類型:是在內存中開辟空間的1個模板.  

2.封裝

1.NSString最常用的類方法和對象方法

+ (instancetype)stringWithUTF8String:(const char *)nullTerminatedCString;

+ (instancetype)stringWithFormat:(NSString *)format

length方法

-(unichar)characterAtIndex:(NSUInteger)index;得到字符串中指定下標的字符.

- (BOOL)isEqualToString:(NSString *)aString;判斷相等的方式.

- (NSComparisonResult)compare:(NSString *)string;比較字符串的大小.

2.匿名對象:如果我們創建1個對象,沒有用1個指針存儲這個對象的地址.也就是沒有任何指針指向這個對象那麼這個對象就叫做匿名對象。 3.對象與對象之間的關系.組合關系依賴關系關聯關系繼承關系  

3.繼承與多態

1.OC中的static關鍵字.

a. static不能修飾屬性也不能修飾方法.

b. static可以修飾方法中的局部變量.

2.Super只能訪問方法,不能訪問屬性。

3.裡氏替換原則 --- LSP

子類可以替換父類的位置.並且程序的功能不受影響.

4.多態:指的是同1個行為,對於不同的事物具有完全不同的表現形式.

4.OC特有語法

1.取到存儲方法的SEL對象,SEL s1 = @selector(方法名);

2.內部的原理:

1).先拿到存儲sayHi方法的SEL對象,也就是拿到存儲sayHi方法的SEL數據. SEL消息.

2).將這個SEL消息發送給p1對象.

3).這個時候,p1對象接收到這個SEL消息以後就知道要調用方法

4).根據對象的isa指針找到存儲類的類對象.

5).找到這個類對象以後在這個類對象中去搜尋是否有和傳入的SEL數據相匹配的.

如果有就執行如果沒有再找父類直到NSObject

 

3.動態類型檢測判斷

1).判斷對象中是否有這個方法可以執行.

- (BOOL)respondsToSelector:(SEL)aSelector;最常用的是這個方法.

2).判斷類中是否有指定的類方法.

+ (BOOL)instancesRespondToSelector:(SEL)aSelector;

3).判斷指定的對象是否為 指定類的對象或者子類對象.

- (BOOL)isKindOfClass:(Class)aClass;

BOOL b1 = [s1 isKindOfClass:[Person class]];判斷s1對象是否為Person對象或者Person的子類對象.

4). 判斷對象是否為指定類的對象 不包括子類.

- (BOOL)isMemberOfClass:(Class)aClass;

[s1 isMemberOfClass:[Student class]];

判斷s1對象是否為1個Student對象.不包括Student的子類對象.

5).判斷類是否為另外1個類的子類.

+ (BOOL)isSubclassOfClass:(Class)aClass;

4.無論如何,記住重寫init方法的規范.

- (instancetype)init

{

if(self = [super init])

{

//初始化當前類的屬性的代碼;

}

retrun self;

}

5.內存管理

1. 內存管理的原則

1). 有對象的創建,就要匹配1個release

2). retain的次數和release的次數要匹配.

3).誰用誰retain. 誰不用誰release.誰負責retain誰就負責relase

4).只有在多1個用戶用的時候才retain少1個用戶使用的時候才release

2.野指針

C語言中的野指針:定義1個指針變量.沒有初始化.這個指針變量的值是1個垃圾值,指向1塊隨機的空間.這個指針就叫做野指針.

OC中的野指針:指針指向的對象已經被回收了.這樣的指針就叫做野指針.

3.在MRC的開發模式下.1個類的屬性如果是1個OC對象類型的.那麼這個屬性的setter方法就應該按照下面的格式寫.

- (void)setCar:(Car *)car

{

if(_car != car)

{

[_car release];

_car = [car retain];

}

}

還要重寫dealloc方法.

- (void)dealloc

{

[_car release];

[super delloc];

}

4. 在ARC機制下.當對象被回收的時候.原來指向這個對象的弱指針會被自動設置為nil 5. @property的參數

atomic nonatomic retain assign strong weak readonly readwrite setter getter

6. 使用命令使ARC MRC兼容 使用命令. -fno-objc-arc  

5.分類 延展 協議

1.分類只能增加方法,不能增加屬性。 2. 本類中的真私有屬性在分類中無法直接訪問. 3. 為系統自帶的類寫分類這個就叫做非正式協議. 4. 分類的作用

1).將臃腫的類分為多個模塊方便管理.

2).擴展1個類.

5. 延展 分類中只能新增方法.而延展中任意的成員都可以寫.

 

分類中可以寫@property但是只會生成getter setter的聲明.延展中寫@property會自動生成私有屬性也會生成getter setter的聲明和實現.

6. 延展天生就是來私有化類的成員的.

如果類的成員只希望在類的內部訪問,那麼就將其定義在延展中.

如果類的成員允許被外界訪問定義在本類的@interface中.

7. block代碼塊

int (^myBlock3)(int num1,int num2);

8. block的實現 int (^myBlock3)(int num1,int num2) = ^int(int num1,int num2){

int num3= num1 + num2;

return num3;

};

9. 協議protocol

作用:

1).專門用來聲明一大堆方法. (不能聲明屬性,也不能實現方法,只能用來寫方法的聲明).

2).只要某個類遵守了這個協議.就相當於擁有這個協議中的所有的方法聲明.而不用自己去定義.

10. @required 與 @optional 修飾協議方法是否必須實現

11. 什麼是代理模式.

傳入的對象,代替當前類完成了某個功能,稱為代理模式.

12. 利用協議實現代理模式的主要思路.

1).定義1個協議.裡面聲明代理類需要實現的方法列表.比如這裡的1個代理類需要實現wash cook方法.

2).創建1個代理類(比如豬豬)遵守上面的代理協議並實現方法

3).在需要代理的類中,定義1個對象屬性類型為id且遵守代理協議的屬性.

4).在代理的類中,調用代理對象的方法.

6.Foundation框架的常用類與方法

1.NSString的方法

1. - (BOOL)writeToFile 字符串寫入文件

2. + (instancetype)stringWithContentsOfFile 從文件讀取字符串

3. 把路徑包含到URL中 NSURL *url = [NSURL URLWithString:@"xxxxxx"];

+ (instancetype)stringWithContentsOfURL: 通過URL讀取文件中的數據

4. - (BOOL)writeToURL: 寫入到URL指向的文件

5. - (NSComparisonResult)compare:(NSString*)string 字符串比較 返回一個枚舉類型 -1 0 1 其中NSOrderedAscending = 1 可以加參數來指定忽略大小寫 6. - (BOOL)isEqualToString: 判斷字符串是否相等 7. - (BOOL)hasPrefix - (BOOL)hasSuffix 判斷字符串是否以指定的字符開頭或結尾 8. - (NSRange)rangeOfString:(NSString*)String 在字符串中搜索子串 9.字符串的截取: -(NSString*)substringFromIndex: -(NSString*)substringToIndex: -(NSString*)substringWithRange:range 10:獲取指定下標字符:-(unichar)characterAtIndex:index 11.字符串轉化為其他數據類型:string.intValue string.doubleValue 12.將OC字符串轉化為C字符串 char *str1 = str.UTF8String; 將C轉化為OC +(instencetype)stringWithUTF8String:str1

2.關於NSRange CGPoint CGSize CGRect

 

1.NSRange range = [NSRange NSMakeRange(3,7)]; 創造一個range結構體變量並初始化

2.NSStringFromRange(range) 將一個結構體變成字符串輸出

3.CGPointMake CGRectMake CGSizeMake


3.NSMutableString 的方法

1.-(void)appendString: 添加字符串 2.-(void)appendFormat: 拼接方式添加字符串

4.NSArray的方法

1.+(instancetype)arrayWithObjects:.....nil; 創建一個NSArray數組 2.-(id)objectAtIndex:index 得到指定下標的元素 3.array.count 得到元素個數 4.-(BOOL)containsObject:(id)object 是否包含某個對象 5.-(NSUInteger)indexOfObject:(id)anObject 查找某個元素第一次在數組中出現的位置 6. NSArray *arr = @[a,b,c,d]; 簡要初始化 7.-(void)enumerateObjectsUsingBlock:..... 代碼塊遍歷數組 8.將數組連成字符串: -(NSString*)componentsJoinedByString 9.將字符串以指定符號分隔成一個數組 -(NSArray*)componentsSeparatedByString:@"#"

5.NSMutableArray的方法

1.-(void)addObject: 2.-(void)addObjectsFromArray 3.指定下標插入 -(void)insertObject:xxx atIndex:xx 4.刪除指定下標 -(void)removeObjectAtIndex:index 5.刪除指定值元素 -(void)removeObject:object; 6.刪除指定范圍內元素 -(void)removeObject: inRange:

6.NSDictionary的方法

1.[NSDictionary dictionaryWithObjectsAndKeys:a,keys,b,key,c,keyc,nil]; 2.NSDictionary *dic = @{keya:a,keyb:b,keyc:c}; 3. .count 鍵值對的個數 4.根據鍵取到值:-(id)objectForKey:key 5.遍歷也可以用block enumerateKeysAndObjectsUsingBlock:

7.NSMutableDictionary的方法

1.增加鍵值對 setObject:xx forKey:xx 2.刪除指定鍵 鍵值對 :removeObjectForKey:xx

8.NSDate方法

1.格式化日期輸出 NSDate *date = [NSDate new]; NSDateFormatter *fom = [NSDateFormatter new]; fom.dateFormat = @"yyyy-MM-dd HH:mm:ss"; NSString *str = [fom stringFromDate:date];   2.將格式化輸出的字符串轉化為NSDate NSDateFormatter *fom = [NSDateFormatter new]; fom.dateFormatter = @"yyyy-MM-dd HH:mm:ss"; NSDate *date = [fom dateFromString:str]; 3.計算兩時間之差 timeIntervalSinceDate:xxx 4.得到時間的各個部分可以使用日歷對象NSCalendar  

7.NSFileManager相關

1.單例模式 NSFileManage *mng = [NSFileManager defaultManager];

2.打開文件時 先判斷是否存在 fileExistsAtPath: isDirectory:

再判斷是否有權限去讀寫 isWritableFileAtPath isReadableFileAtPath isDeletableFileAtPath

最後再去操作訪問文件

3.獲取信息的方法

拿到文件的屬性信息 attributesOfItemAtPath

拿到所有子孫文件目錄 subpathsAtPath

拿到所有一級子目錄 contentsOfDirectory

4.創建文件 creatFileAtPath

5.在指定目錄創建文件夾 creatDirectoryAtPath

6.copy文件 copyItemAtPath: toPath:

7.移動文件 moveItemAtPath: toPath:

8.刪除文件 removeItemAtPath: 直接刪除,不進廢紙簍

8.Copy與單例補充

1.copy調用了copyWithZone 方法 此方法定義在NSCoping協議中。可以自己重寫這個方法來自定義copy,要注意繼承NSCoping

2.alloc方法內部調用了allocWithZone方法 可以通過重寫allocWithZone來達到創建單例模式對象的目的,但要求提供類方法名,類方法名必須以shared或者default開頭

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved