NSobject的复制以及其他一些类方法和实例方法的理解

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方法");
        }

 


 

转载于:https://www.cnblogs.com/wangweixl/p/4017893.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值