黑马程序员 _8 OC基础 id description sel的使用

---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------


一 OC中的万能指针id

id是OC中特有的指针能指向或操作任何OC对象使用的方式

int main(int argc, const char * argv[])
{

    @autoreleasepool {
        Person *p = [Person new];
                
        NSObject *o = [Person new];
                
               id d = [Person new];
        
        [d setAge:10];
        
        [d setObj:@"321423432"];
        
        NSLog(@"%d", [d age]);
    }
    return 0;
}

注意:上面相当于NSObject *d = [Person new];,也就是使用id是后面不用加*号键.

当数据类型不明确时,使用id再好不过,id的使用相当于多态.id只能调用类方法同时不能调用对象方法

二 description的修改

NSLog函数用%@输出某个OC对象时,就会调用这个方法的description方法,并将返回的字符串代替%@的位置进行输出.

由于description方法的默认返回格式:<类名: 对象的内存地址>,而我们一般关心的不是内存地址,而是对象的成员变量值,所以会经常重写description方法.

如在Person.m中重写description方法返回成员变量_age的值

 - (NSString *)description {
  return [NSString stringWithFormat:@"age=%i", _age];
  }

这样当在main.m调用时,就会输出变量的值,而不是内存地址.

注意:在description方法中同时使用%@和self会使程序陷入死循环,如

- (NSString *)description {
 return [NSString stringWithFormat:@"%@", self];
 }

self会循环的调用description方法.

三 sel 的使用

sel将方法进行包装,方便方法的调用,其实消息就是sel

使用的过程为:

int main()
{
    Person *p = [[Person alloc] init];
    
    [p test2];
NSString *name = @"test2";
    
     SEL s = NSSelectorFromString(name);
    
    [p performSelector:s];
return 0;
}
实质sel就是将test2包装成sel类型的数据,之后通过sel数据在调用test2.


















---------------------- ASP.Net+Unity开发.Net培训、期待与您交流! ----------------------

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值