copy和copyWithZone @interface Animal :NSObject <NSCopying> //在后面包含NSCOPYING协议 在M文件中复制ANimal类中的对象. - (id)copyWithZone:(NSZone *)zone //copy使用方法需要运行- (id)copyWithZone:(NSZone *)zone实例方法 { Animal * animal =[[Animal allocWithZone]init]; //allocwithzone=alloc.意思一样 animal.weight=_weight; //如果不让weight=_weight,则当愿animal.weight设值,复制的对象中 return animal; //weight将无法获得 }
NSObjec类中一些实用方法与类方法 + (void)load //当类被加载到内存的时候自动调用一次 + (void)initialize //在手动调用类里的任何方法前自动调用一次 - (id)init //初始化,然后return self,返回自身这个对象 +(instancetype)create //创建一个类的对象, 1. id,任意类型的对象指针,和instancetype没太多区别 2. instancetype不能作为普通的类型使用(不能用来定义变量) 3. instancetype会进行严格的类型检查 4. 初始化方法没用数目限制, 比如 - (id)inITwithAge:(int)age weight:(float)weight { self = [super inITwithAge:age weight:weight] if(self){ } return self; //他就会运用父类初始话的值而不进行自己的初始化等等. 5. self在实例方法中表示调用该方法的对象,在类方法中,表示调用该方法的类 6.当使用%@做为格式化字符串,打印的不会是后面的字符串,而是后面 description的方法中的结果,打印出来的是类名与地址 7- (id)performSelector:(SEL)aSelector; 执行对象里的某个方法,,但是不会判断是否在头文件中声明 8-- (void)performSelectorInBackground:(SEL)aSelector withObject:(id)arg NS_AVAILABLE(10_5, 2_0); 表示在新的线程中执行一个方法,就等于同步并列可执行两个,比如上个方法是死循环,那么不使用这个方法,则无法进行 如[dog1 performSelectorinbackground@selsector(brak)with:nil]; 9 子类必须实现父类某个方法,用于报错,表示后面写的人必须重新写个bra的实现方法,主要用于多人合作中‘ -(void)brak { [self doesNotRecognizeSelector:@selector(bark) ]; //表示提示子类必须实现父类的某个方法 10判断一个类是否实现了某个实例方法 if ([Dog instancesRespondToSelector:@selector(brak)]) { //判断一个类是否实现了某个实例方法 NSLog(@"CollegeStudent实现了print方法"); }
原文:http://www.cnblogs.com/wangweixl/p/4017893.html