博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Objective-C( 语法二)
阅读量:5766 次
发布时间:2019-06-18

本文共 1902 字,大约阅读时间需要 6 分钟。

 分类(Category):可以给某一个类扩充一些方法(不修改原来类的代码)

 作用:在不改变原来类内容基础上,可以为类增加一些方法

 

 使用注意

   1. 只能增加方法,不能增加成员变量

   2. 分类方法实现中可以访问原来类中的成员变量

   3. 分类可以重新实现原来类中的方法,会覆盖原来类的方法,导致原来类的方法无法再使用

   4. 分类的优先级最高:调用一个方法优先去分类中找,再去原来类,然后父类中找

  分类(最后编译的优先)—》原来类—》父类

  声明:

 @interface 类名(分类名称)

 @end

  实现:

 @implementation 类名

 @end

 

类的本质

类本身也是一个对象,是Class类型的对象,简称类对象

Class类型的定义

typedef struct objc class *Class

类名代表着类对象,每个类只有一个类对象

 

+load方法和+initialize方法:

1.当程序启动时,就会加载项目中所有的类和分类,而且加载后会调用每个类和分类的+load方法。只会调用一次。

2.当第一次使用某个类时,就会调用当前类的+initialize方法,一个类只会调用一次+initialize方法

3.先加载父类,再加载子类(先调用父类的+load方法,再调用子类的+load方法)

   先初始化父类,再初始化子类(先调用父类的+initialize方法,再调用子类的+initialize方法

 

description方法

使用NSLog输出属性较多时,修改默认输出,可重写+description方法或-desription方法

+description方法:

默认情况下,使用NSLog和%@输出对象时,调用对象的-desription方法,拿到的返回值(NSString *)屏幕输出结果是:<类名:内存地址>

+desription方法:

默认情况下,使用NSLog和%@输出类对象时,调用类对象的+desription方法,拿到的返回值(NSString *)屏幕输出

 

注意点:

不要在-desription方法中尝试使用self,会造成死循环

 

NSLog打印

1. %p

   打印指针变量p的地址  

  NSLog(@"%p", &p);

    打印对象地址

      NSLog(@"%p", p);

 

2. %@

  %@ 打印<类名:对象地址> 

  NSLog(@"%@", p);

3.  _LINE_     %d    输出当前行号

4.  _FILE_      %s    输出文件路径

5.  _func_      %s    输出当前函数

 

SEL

全称selector

SEL 其实是对方法的一种包装,将方法包装成一个SEL类型的数据,去找对应的方法地址,找到方法地址就可以调用方法

_cmd 代表当前方法

消息就是SEL

#import 
@interface Person : NSObject+ (void)test;- (void)test1;- (void)test2:(NSString *)abc;@end@implementation Person+ (void)test{ NSLog(@"+test+++++++");}- (void)test1{ NSLog(@"-test-------");}- (void)test2:(NSString *)abc{ NSLog(@"test2----%@", abc);}@endint main(){ Person *p = [[Person alloc] init]; NSString *name = @"test1"; SEL s = NSSelectorFromString(name); [p performSelector:s]; // [Person test]; // [p test1]; // 1.把test1包装成SEL类型的数据 // 2.根据SEL数据找到对应的方法地址 // 3.根据方法地址调用对应的方法 // 间接调用test1 // [p performSelector:@selector(test1)]; // [p performSelector:@selector(test2:) withObject:@"123"]; return 0;}

 

转载于:https://www.cnblogs.com/1023843587qq/p/4751099.html

你可能感兴趣的文章
Hadoop HA现有解决方案
查看>>
【自用】 Selection sort by Python
查看>>
Tomcat性能调优-让小猫飞奔
查看>>
UITextField一些技巧总结
查看>>
python selectors 模块应用
查看>>
关于smarty中cache的设置
查看>>
关于Spring中自动装配的总结
查看>>
iOS推送服务
查看>>
Struts( 三 )
查看>>
泛型排序
查看>>
根排序
查看>>
浅谈如何看待运维?
查看>>
Gcc 连接静态库使用 -lxxxx xxxx为库名字
查看>>
Banana PI 开源硬件项目启动
查看>>
声音攻击能损害硬盘Win 和 Linux 都会受影响
查看>>
List排序类
查看>>
Nginx配置文件nginx.conf中文详解
查看>>
SAX解析XML 详解 (转)
查看>>
《都市侠盗》中的Parker,原来客串过《老爸老妈浪漫史》。
查看>>
Yii框架zii.widgets.grid自定义按钮,ajax触发事件并提示
查看>>