GeekBand-OC第二周筆記(字符串、集合、類別)

2.1字符串處理

NSString:

共享機制,不可更改。

比較:

  • A==B,直接比較指針;
  • isEqualToString:(NSString)比較實際字符串的內容;

偽更改:

  • stringByAppendingString:(NSString),返回新字符串。
  • stringByReplacingCharactersInRange:(NSRange) withString:(NSString),使用這個函數替換原有字符串。NSRange函數,location代表字符串開始的Index,length代表字符串長度。withString后面跟上要替換的字符串。注意也是通過返回新字符串的方式。
  • (盜用下老師的課件)
   str1 = str1.uppercaseString;//大寫
   str1 = str1.lowercaseString;//小寫
   str1 = str1.capitalizedString;//首字母大寫

操作:

  • rangeOfString:(NSString),查找字符串,以NSRange形式返回參數,location代表開始的Index,length代表長度。
  • substringFromIndex:(NSUInteger),參數為數字,從該位置開始把一個字符串后面的字符輸出,也是通過返回字符串的方式。
  • A hasPrefix:(NSString),參數為字符串,作用是判斷A中有沒有B,返回類型是BOOL。
  • stringWithFormat:(NSString),參數字符串,工廠方法,NSString類方法,作用快速新建字符串對象。

NSMutableString:

新建:

  • stringWithString:(NSString),類方法,工廠方法。
  • stringWithCapacity:(NSUInteger),參數為數字,作用是為對象分配內存。

修改:

  • appendString:,添加字符串
  • insertString:(NSString) atIndex:(NSUInteger),在指定位置添加字符串。
  • setString:(NSString),重新設置字符串。
  • replaceCharactersInRange:(NSRange) withString:(NSString),把指定字符串修改為我們想要的字符串。
  • deleteCharactersInRange:(NSRange),刪除字符串。

2.2集合類型

NSAarry:

初始化:

  • NSArray arrayWithObjects:(id,...,nil),工廠方法。
  • [[NSArray alloc] initWithObjects:(id,...,nil),初始化器方法。
  • @[@"Shanghai",@"Beijing",@"New York",@"Paris"],直接賦值,不需要nil結尾。

裝箱:

value:(const void *) withObjCType:(const char *)type,工廠方法。
使用:NSValue *pointObject=
[NSValue value:&point withObjCType:@encode(Point)];暫時沒弄懂@encode的意思。

遍歷:

  • 快速枚舉
for ( BLNPoint* point in array5)
   {   
       point.x++;
       point.y++;
   }

數組查找:

  • 查找內容一樣的元素
    (NSUInteger)indexOfObject:(ObjectType)anObject,返回在數組中的序號。
  • 查找指針一樣的元素
    (NSUInteger)indexOfObjectIdenticalTo:(ObjectType)anObject,返回在數組中的序號。

排序:

  • sortedArrayUsingSelector:@selector(compare:),按字母順序排序,這個函數沒弄懂。

NSMutableArray:

初始化:

  • 工廠方法
    NSMutableArray arrayWithObjects:(id,...,nil) 。
  • 初始化內存
    NSMutableArray arrayWithCapacity:(NSUInteger)。

NSSet 與 NSMutableSet:

與 NSAarry 大同小異,不贅述。

2.3 ARC:

ARC管理的:

  • OC對象指針。
  • Block指針。
  • 使用attribute((NSObject))定義的typedef。

ARC不管理的:

  • 值類型。
  • 使用其他方式分配的堆對象。
  • 非內存資源。

ARC引用計數:

新建:

  • alloc
  • new
  • copy(等...)

加一:

  • 被賦值給其他變量、常量、屬性等。
  • 被傳遞給函數作為參數,或者是函數的返回值。
  • 被加入數組、集合、字典中。

減一:

  • 持有該對象的變量或屬性被賦值為nil或其他值(也就是不再持有該對象)。
  • 持有該對象的對象被釋放。
  • 離開函數時。
  • 從數組、集合、字典刪除。

協議、類別、拓展:

協議:

包含對象:

  • 屬性
  • 實例方法
  • 類方法
    協議中無法包含實例變量,屬性實際上是兩個訪問器方法。

協議實現:

  • 在遵守協議的類中,required成員必須實現,否則會出現警告。
  • optional聲明的方法可選實現或者不實現。
  • 協議變量被賦值沒有遵守該協議類的對象將會出現警告。

檢查一個對象是否遵守該協議:

  • (BOOL)conformsToProtocol:(Protocol *)aProtocol

類別:

類別功能:

可以添加:

  • 類方法
  • 實例方法
  • 重寫基類方法
    不能添加:
  • 屬性
  • 實例變量
  • 已存在的方法

使用地方:

  • 向已封裝的類中添加方法
  • 增加類的功能
  • 復雜文件分割實現

拓展:

  • 當做匿名的類別,隱藏外部無需訪問的方法。
  • 支持添加屬性、實例變量、類方法、實例方法等。
  • 還可以增加屬性的讀或寫屬性。(注意,不能減少,因為這是拓展。)
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容