一,NSObject的基本使用
NSObject的常用方法
1.判断是够味aClass或者aClass的子类的实例
- (BOOL)isKindOfClass:(Class)aClass
2.判断是否为aClass的实例(不包括aClass的子类)
- (BOOL)isMenberOfClass:(Class)aClass
3.判断对象是否实现了aProtocol协议
- (BOOL)conformaToProtocol:(Protocol)aProtocol
4.判断这个类的对象是否拥有参数提供的方法
+ (BOOL)instancesRespondToSelector:(SEL)aSelector
5.判断对象是否拥有参数提供的方法:无传入参数时test后面不用加冒号,有参数则加冒号,不能传入一般数据类型 只能传入面向OC对象的
- (BOOL)respondsToSelector:(SEL)aSelector
6.延迟调用参数提供的方法,方法所需从参数用withObject传入
- (void)performSelector:(SEL)aSelector withObject:(id)andArgument afterDelay:NSTimeInterval)delay
二,反射
反射定义
:根据一个字符串(方法)可创建一个对象(方法),根据字符串来使用另一个对象
Class的反射
1.通过类名的字符串形式实例化对象
Class class = NSClassFromString(@"Student");
Student *stu = [[class alloc] init];
2.将类名变成字符串
Class class = [Student class];
NSString *className = NSStringFromClass(class);
SEL的反射
1.通过方法的字符串形式实例化方法
SEL selector = NSSelectorFromString(@"setName:");
[stu performSelector:selector withObject:@"Mike"];
2.将方法变成字符串
NSStringFromSelector(@selector(setName))
三,copy
1.copy的根本目的:改变副本的时候,不会改变源对象
2.copy的分类:1>深拷贝:内容拷贝,会产生新的对象,新对象计算器+1,源对象计算器不变,如 MutableCopy
2>浅拷贝:指针拷贝,不会产生新的对象,copy直接返回源对象本身如copy
深拷贝与浅拷贝取决于源对象本身,如源对象本身就是不可变则是浅拷贝
3.copy的使用场合:改变外面对象,不影响内部对象的时候用copy策略
4.copy的特点:1>copy代表set 方法时会release旧对象,copy新对象
2>copy会修改外面的变量,并不影响内部的成员变量,retain则会改变内部成员变量
3>建议:字符串String一般用copy策略,其他对象一般用retain,根据需求来选择