1. self 的用法
如果self在类的对象中,则表示这个的对象,在类方法中表示类.
2.有什么用
可以在类中用来表示调用者,去调用方法或者属性
3. 何时用
当需要在类方法中调用方法或属性时.
特点:在方法中不能调用方法自己, 用self时不要在方法中用self调用方法本身,这样会产生死递归.
5. super 的用法
表示调用父类中的方法
6 . 使用场合:
当子类重写父类的方法后,在某些情况下,又需要用到父类方法的功能.
注意:对象方法中只能调用父类的对象方法.类方法只能调用对象的类方法.
如果子类没有重写父类的方法,没有必要用super.用self.
所以只有在子类重写了父类方法的时候,我们调用父类方法,才要用super.
属性不能用super.因为子类不能重写父类的属性.
***super只适用于方法.
super不能调用属性,self可以调用.
属性(成员变量)的作用域,由权限修饰符控制的
7.成员变量的常用作用域有4种:
@public 全局都可以访问
@protected 只能在类内部和子类中访问
@private 只能在类内部访问
@package 用于框架之间
8. 什么是协议
一些方法的声明,一般写到一个.h的头文件中
方法有两种:必须实现 required 选择实现 optional
9. 协议的作用
供其他的类去遵守,如果一个类遵守了一个协议,就应该实现这个协议中定义的必须要实现的方法
10. 如何定义一个协议:
@protocol xxx <NSObject>默认情况下遵守NSObject协议
@end
11 .类遵守协议的格式:
a.遵守一个协议 ,先导入头文件
@interface 类名 :NSObject <xxx>
@end
12.遵守多个协议
@interface 类名: NSObject <xxx,aaa,bbb>
@end
注意点:
如果一个类遵守了一个协议,就应该实现这个协议中定义的必须要实现的方法
13 - 使用协议的流程:
//--> 定义协议
// --> 让类遵守这个协议
// --> 实现协议中对应的方法(必须要实现的)
14- 协议与协议之间可以包含
可以类比头文件包含头文件之后,是不是相当于有了其他头文件的声明
一个庞大的类可以分模块开发
一个庞大的类可以由多个人来编写,更有利于团队合作.
17.使用分类的步骤
先声明分类 ->>实现分类->>使用分类中的方法
注意:类别的命名规则:类名+扩展方法,如"NSString+countNum"
18.分类使用的注意事项:
在分类的声明中不能声明实例变量
不能定义实例变量也不能使用@property
在分类的方法中,可以访问类中的实例变量
a.在分类中存在和类同名的方法
优先访问的时 分类中的方法
b. 当在多个类别中有同名的方法的时候,这时候执行的最后编译的那个类别的同名方法
分类的>原类
最后编译的分类>其他的分类
19.声明类别格式:
a.新添加的方法必须写在@interface与@end之间
b.ClassName现有的类名(要为哪个类扩展方法)
c.CategoryName 待声明的类别名称
d.NewMethod新添加的方法
注意:不允许在声明类别的时候定义变量
20.实现类别格式
a.新方法的实现必须写在@implementation与@end之间
b.ClassName现有类的类名
c.CategoryName 待声明的类别名称
d.NewMethod 新添加的方法的实现
21.非正式协议的概念
非正式协议就是给NSObject类创建的类目(分类)又叫做非正式协议,非正式协议一般不需要进行实现,一般在子类中进行方法的重写.
所谓非正式协议就是类别,即凡是NSObject或其子类的类别,都是非正式协议.
// 计算字符串长度.
NSString *str=@"abc12sdfsdfjl234l5";"
22.类延展的概念
延展类别又称为扩展(Extendsion)
延展,延展类别,扩展,这几个是一个概念.
这种写法的类别叫匿名类别,又叫类扩展,所谓的扩展其实就是为一个类添加额外的原来没有的变量,方法或者合成属性. // 面试会问
延展是一个特殊的分类
特点: 1可以在延展中定义实例变量
2.不能使用@implementation类名 ( ) 实现类别的方法
@interface Person :NSObject
@property int age ;
@end
@interface Person ( ) { // 在原有的类方法中,延展一个方法
float _weight;
}
-(void)run;