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

Object-C基礎總結

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對象是否爲1Student對象.不包括Student的子類對象.

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

               + (BOOL)isSubclassOfClass:(Class)aClass;

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

     - (instancetype)init

     {

         if(self = [super init])

         {

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

         }

         retrun self;

     }

5.內存管理

1.  內存管理的原則

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

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

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

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

2.野指針

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

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

3.MRC的開發模式下.1個類的屬性如果是1OC對象類型的.那麼這個屬性的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開頭

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章