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
类别:
类别功能:
可以添加:
- 类方法
- 实例方法
- 重写基类方法
不能添加: - 属性
- 实例变量
- 已存在的方法
使用地方:
- 向已封装的类中添加方法
- 增加类的功能
- 复杂文件分割实现
拓展:
- 当做匿名的类别,隐藏外部无需访问的方法。
- 支持添加属性、实例变量、类方法、实例方法等。
- 还可以增加属性的读或写属性。(注意,不能减少,因为这是拓展。)