---------------------- 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培训、期待与您交流! ----------------------