19.深复制与浅复制,NSObject万能指针、id指针、instancetype区别,单例
1\深复制与浅复制
1>深复制:源对象和副本对象是不同的两个对象
源对象引用计数器不变,副本对象计数器为1
"本质:产生了新的对象
2>浅复制:源对象和副本对象是同一个对象
源对象引用计数器+1,相当于做一次retain操作
"本质是:没有产生新的对象
----只有源对象和副本对象都不可变时,才是浅复制,其他都是深复制---
2\NSObject万能指针、id指针、instancetype区别
1>NSObject和id区别
1)NSObject是静态类型,他可以指向任何对象,编译不会报错(弱语法) 也不会警告(里氏替换原则)
"但直接调用NSObject上面不存在的方法是,编译器会报错,想通过NSObeject指针调用特定对象的方法,就必须把NSObject * 强制转换为指定类型
2)id是动态类型, 它可以指向属于任何类的对象,也可以理解为万能指针,通过id类型直接调用指向对象中的方法,编译器不会报错
补充:"不能使用.语法,因为.语法是编译器特性,而id是运行时特性
2>id和instancetype区别
1)instancetype只能作为方法的返回值(返回值是这个类本身的对象)
id指针是一个万能指针,通常id可以用来定义一个可以指向任何对象的指针变量 ---可以作为返回值---可以作为形参
2)id在编译的时候不能判断对象的真实类型
instancetype在编译的时候可以判断对象的真实类型
"但凡自定义构造方法,返回值尽量使用instancetype,不要使用id
3\单例
单例就是无论怎么创建都只能有一个实例对象,创建的对象地址相同
意味着这个单例对象中的属性的值被"共享"
当有一些数据需要"共享"给别的类的时候,就可以把这些数据存在单例对象中
一般情况下创建一个单例对象的方法是以default或者share开头
#pragma mark - 20.Foundation 关键方法
增: add insert append set(重新赋值)
删: delete remove drop trimming(一般是修剪前后)
改: replace update
查: ObjectAtxxx ObjectForxxx
20.Foundation 关键方法
1\字符串(NSString)***********************
快速创建字符串:NSString *str = @"IOS";
"必须背":
stringWithFormat:方法:创建NSLog()格式的字符串*****
stringWithUTF8String:方法:将创建的字符串转换为UTF8字符串(C语言字符串转换成OC字符串)*****
isEqualTostring:方法:比较字符串是否相等*****
compare:方法:比较字符串的大小*****
characterAtIndex:方法:返回索引号所在字符串中的字符*****
length:方法:求字符串的长度*****
"查:"
hasPrefix:方法:判断字符串是否以某个字符开始***
hasSuffix:方法:判断字符串是否以某个字符结束***
rangeOfString:方法:查找字符串中是否包含其他字符串***
"改:"
substringToIndex:方法:从字符串的开头一直截取到指定的位置***
substringFromIndex:方法:从指定位置开始截取字符串直到结束***
stringByAppendingPathExtension:方法:为文件添加扩展名***
stringByAppendingString:方法:字符串后面增加一个新字符串***
stringByTrimmingCharactersInSet:方法:去除空格或回车***
可变字符串(NSMutableString)
"增:
appendString:方法:在字符串的末尾附加另一个字符串***
appendFormat:方法:附加一个格式化字符串***
insertString:方法:在指定位置插入字符串
"改:
replaceOccurrencesOfString:方法:替换 将字符串中的某个字全部替换成别一个字***
stringByReplacingOccurrencesOfString:方法;将字符串中的某个字全部替换成别一个字***
replaceCharactersInRange:方法:使用字符串代替指定范围的字符串
"删:
deleteCharactersInRange:方法:删除指定范围的字符串
"补充:"
NSString: 效率高. 不拼接的时候. 同1个字符串对象,如果后面要用. 就不会再创建了.
大批量拼接效率低, 每次修改字符串都要新建对象.
NSMutableString: 只要alloc new都是1个新的对象.
优点:大批量拼接的时候效率高.修改字符串可以不用新建对象
2\数组对象(NSArray)*********************************************
快速创建数组:NSArray *arr = @[@"鹏哥", @"庆姐", @"海哥",@"飞哥"];
count:方法:计算元素个数*****
"block来遍历NSArray数组."
- (void)enumerateObjectsUsingBlock:(void (^)(ObjectType obj, NSUInteger idx, BOOL *stop))block
"增:
arrayByAddingObject:方法:在数组末尾添加元素*****
"改:
componentsJoinedByString:方法:数组转换为字符串*****
componentsSeparatedByString:方法:字符串转换为数组(注意:"用字符串调用方法")*****
"查:
containsObject:方法:判断数组中是否包含某个元素*****
firstObject:方法:获取首元素*****
lastObject:方法:获取最后一个元素*****
objectAtIndex:方法:获取在某个位置的数组元素*****
indexOfObject:方法:返回元素所在的位置*****
"持久化(文件):
writeToFile:方法:将数组中的内容写入到文件*****(一般写到plist文件实质是XML)
可变数组(NSMutableArray)
"增:
addObject:方法:添加数组元素*****
addObjectsFromArray:方法:用数组创建可变数组*****
insertObject:方法:在某一位置插入数组元素*****
"删:
removeObject:方法:删除指定的元素*****
removeAllObjects:方法:删除可变数组中的所有元素*****
removeLastObject:方法:删除可变数组中的最后一个元素*****
removeObjectAtIndex:方法:删除指定位置的元素*****
removeObjectsInRange:方法:删除某个范围内的可变数组中的元素*****
"改:
replaceObjectAtIndex:方法:替换可变数组中某一位置的元素*****
replaceObjectsInRange:方法:替换某一范围的数组元素*****
3\字典对象(NSDictionary)
快速创建字典:NSDictionary *dic = @{@"name":@"鹏哥", @"age":@"18"};
count:方法:字典键-值个数*****
"block来遍历字典数组."
- (void)enumerateKeysAndObjectsUsingBlock:(void (^)(KeyType key, ObjectType obj, BOOL *stop))block
"增:
dictionaryWithObject:方法:创建具有一个键-值的字典***
dictionaryWithObjectsAndKeys:方法:创建具有多个键-值的字典***
"查:
objectForKey:方法:返回键的值***
"持久化:
writeToFile:方法:字典内容写入文件中(一般写到plist文件实质是XML)***
可变字典(NSMutableDictionary)
"增:
setObject:方法:设置键-值***
"删:
removeAllObjects:全部清空.
removeObjectForKey:方法:删除键所对应的值***
"改:
setValue:方法:修改值***
#pragma mark - 点招之外
4\数字对象(NSNumber)-->NSValue的子类
numberWithInt:方法:创建整型数字对象(整型--->转OC对象)
intValue 对象类型------>转整型
isEqualToNumber:方法:比较两对象值是否相等
>>>>>>>>>>NSValue包装结构体数据valueWithxxx:
5\文件(NSFileManager)("单例)
createFileAtPath:方法:创建文件
copyItemAtPath:方法:复制文件
moveItemAtPath:方法:移动文件
removeItemFileAtPath:方法:删除文件
fileExistsAtPath:方法:判断文件是否存在
6\时间(NSDate、NSDateFormatter、NSCalendarDate、NSCalendar)
isEqualToDate:方法:比较是否相等
compare:方法:比较时间
calendarDate:方法:创建日历时间
函数: 坐标.尺寸.与字符串相互转换
结构体转字符串
NSString *NSStringFromPoint(NSPoint aPoint);
NSString *NSStringFromSize(NSSize aSize);
NSString *NSStringFromRect(NSRect aRect);
字符串转结构体
NSPoint NSPointFromString(NSString *aString);
NSSize NSSizeFromString(NSString *aString);
NSRect NSRectFromString(NSString *aString);
|
|