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
類別:
類別功能:
可以添加:
- 類方法
- 實例方法
- 重寫基類方法
不能添加: - 屬性
- 實例變量
- 已存在的方法
使用地方:
- 向已封裝的類中添加方法
- 增加類的功能
- 復雜文件分割實現
拓展:
- 當做匿名的類別,隱藏外部無需訪問的方法。
- 支持添加屬性、實例變量、類方法、實例方法等。
- 還可以增加屬性的讀或寫屬性。(注意,不能減少,因為這是拓展。)