广西网站建设工具建设工程网站贴吧
news/
2025/9/23 21:26:36/
文章来源:
广西网站建设工具,建设工程网站贴吧,网站建设合同付款比例,企业网站注册域名的步骤一#xff1a;description方法 description有对象方法和类方法两种#xff0c;#xff08;是NSObject类的方法#xff09;1#xff0c;-description#xff08;对象方法#xff09; 使用NSLog和%输出某个对象时#xff0c;会调用对象的description方法#xff0c;并拿…一description方法 description有对象方法和类方法两种是NSObject类的方法 1-description对象方法 使用NSLog和%输出某个对象时会调用对象的description方法并拿到返回值进行输出。系统会自动调用打印对象的description方法 而如果打印NSString对象的话默认返回的就是NSString字符串 2description 类方法 使用NSLog和%输出某个类时会调用类的description类方法并拿到返回值进行输出。 系统默认会直接调用NSObject父类的description方法返回对象的名和地址打印出来 所以如果我们想要打印属性值的话就需要重写description的方法 #import Foundation/Foundation.h interface Car : NSObject { public int _lunzi; int _seats; NSString *_name; } -(void)run; end implementation Car -(void)run{ NSLog(三胖驾车跑了); } //重写父类的description方法 -(NSString *)description{ return [NSString stringWithFormat:name:%,lunzi:%d,seats:%d,_name,_lunzi,_seats]; //self car //return [NSString stringWithFormat:aaaa-%,self]; } (NSString *)description{ return xxxx; } end int main(int argc, const char * argv[]) { Car *car [Car new]; car-_name 大切; car-_lunzi 8; car-_seats 10; //% 可以打印OC中的对象类型 //NSString *str xxxx; //注意当我们使用% 打印car对象的时候会调用我们类的 // -(NSString *)descrition; // Class c [car class]; NSLog(\ncar:%,car); NSLog(\nCar:%,c); NSLog(name:%,lunzi:%d,seats:%d,car-_name,car-_lunzi,car-_seats); return 0; } 二类的本质 类本身也是一个对象是class类型的对象简称“类对象”。 Class类型的定义 Typedef struct obj class *class; 可以看到类对象的类型为struct 0bj class * 及指向结构体地址的指针类型 获取内存中的类对象有两种方法(一个类的类对象只有一个及内存分配一个相同的空间 1Class c[p class]; //指向类的对象的指针调用class方法 2Class c1[Person class]; //使用类名调用class方法 类对象本质图解 类———————类对象-------------实例对象 在编译时就会将类加载到代码区 然后加载类对象到堆区 后三步为对象的加载并且实例对象的isa指针指向类对象。类对象中isa指针指向类。而且类对象中得SEL映射表为类中方法地址 三SEL:全称Selector 表示方法的存储位置。sel是一种数据类型存放方法的地址在类对象的映射表里面存放着映射关系 Person *p[[Person alloc] init]; [p test]; 实例对象寻找方法的过程 1首先将方法包装成sel数据类型的数据 SEL *sel selector(方法名) 2然后根据SEL找方法的地址 3根据方法的地址调用相应的方法 4注意:在这个操作过程中有缓存第一次找的时候是一个一个的找非常耗性能之后再用到的时候就直接使用。 关于_cmd:每个方法的内部都有一个-cmd,代表着当前方法。 //SEL是一种数据类型获取方法的地址 SEL s1 selector(run); //取出run的地址 [p2 performSelector:s1]; //间接的调用run 注意SEL其实是对方法的一种包装将方法包装成一个SEL类型的数据去寻找对应的方法地址找到方法地址后就可以调用方法。这些都是运行时特性发消息就是发送SEL然后根据SEL找到地址调用方法。 四self和super的用法: self、super是一个指针self谁调用了当前方法self就指向谁 而super指向了当前类的父类如果super在类方法中它就代表了调用当前类方法的类的父类如果在对象方法中它就代表调用当前对象方法的对象的父类对象 1如果self、super在类方法中,那么它就代表当前调用这个类方法的类、父类 2如果self在对象方法中那么它就代表当前调用这个对象方法的对象、父对象 出现在对象方法中就代表着当前对象出现在类方法中就代表着当前类】 Self、super的用途:通下 (1)可以利用self-成员变量名访问当前对象内部的成员变量仅在对象方法中 (2)[self 方法名]可以调用其他的对象方法或者是类方法 转载于:https://www.cnblogs.com/-boy/p/4069955.html
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/913935.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!