首页 > 代码库 > NSobject的基本方法使用

NSobject的基本方法使用

  除了NSobject以外,所有的类都有父类。默认的父类一般是NSobject。

  我们建立一个名为person,继承NSobject的子类,来方便下面的讨论。

    //初始对象

    person *niang=[[person alloc] init];   

 

    //1 这个方法是判断有没有这个实例方法,返回值是bool类型。有,返回1,没有,返回0。只能判断实例方法。

    BOOL a=[person instancesRespondToSelector:@selector(print)];

    NSLog(@"%d",a);

    //2 功能和上一个函数一样,这是这是一个实例方法。

    BOOL a1=[niang respondsToSelector:@selector(print)];

    NSLog(@"%d",a1);

   

  //3 判断有没有遵守这个协议。

    Protocol *NSCoding;

    BOOL b=[person conformsToProtocol:NSCoding];

    NSLog(@"%d",b);

 

    //4 nsobject的一个类方法,会得到一个指向这个实例方法的一个函数指针

    IMP nprint=[person instanceMethodForSelector:@selector(print)];

    nprint();

 

  //5 nsobject的一个实例方法,会得到一个指向这个实例方法的一个函数指针

    IMP nprint1=[niang methodForSelector:@selector(print)];

    nprint1();

 

    //6 运行时替换person中print方法的实现,用replace这个方法实现(前提是你把这个方法实现了),用个方法时注意这四个参数的类型。

    IMP replace=[niang methodForSelector:@selector(replace)]; 

   class_replaceMethod([person class], @selector(print),replace, NULL);

    [niang print];

   

    //7 这个方法的作用:给person这个类添加一个nothing的方法,方法的实现是replace

    class_addMethod([person class], @selector(nothing),replace, NULL);

    [niang performSelector:@selector(nothing)];

   //上面两个方法说明了 oc是一门动态语言。

   

    //8  我们调用实例方法时“[]”就是下面的内容

    //   objc_msgSend(niang,@selector(print));

 

   我们在创建一个 名为 son 继承于person的子类。

   son *son1=[[son alloc] init];

 

       9  如果我们在子类中实现了与父类同名的方法,子类的对象调用该方法时,是调用子类自己的那个方法。

 

    //10 本质上,用%@打印对象的时候,打印的是该对象调用的description方法所返回的字符串。

    NSLog(@"%@******%@",[son1 description],son1);

 

    //11 该方法判断 son1是不是person类的对象。这里返回的是1(子类的对象都是属于父类的)

    BOOL c=[son1 isKindOfClass:[person class]];

    NSLog(@"%d",c);

   

//12 该方法功能与上面一样,但是是严格匹配类型。在这个方法中,子类的对象不是属于父类的了。所以这里返回的时0

    BOOL c1=[son1 isMemberOfClass:[person class]];

    NSLog(@"%d",c1);