1.点语法的介绍
本质:方法调用
Person *p = [[Person alloc]init];
//这里调用的事set语法 [p setName:@"林芳"];
p.name = @"林芳";
//这里调用的事get语法 [p name];
NSString *name = p.name;
//**注意点:在 = 号前是set ,=号后是get
2.成员变量作用域
@public : 任何地方都能直接访问成员变量
@private : 只能在当前类的对象方法中直接访问
@protected : 可以在当前类及子类的对象方法中直接访问 (默认)
@package : 只要在一个框架,都可以访问
3.@property 和 @synthesize
1>@property 自动生成set 和get方法的声明 / 实现 int a;
2 > @synthesize 自动生成set 和get方法的实现 并且会访问_name这个成员变量 a = _a;
注意点:成员变量才写_name ,使用@property时不需要写
若手动生成 set get 方法,@property就不会帮你生成成员变量
@property的参数
1. strong:成员变量是强指针 (适用于oc对象类型)
2.weak : 成员变量是弱指针 (适用于oc对象类型)
3. assign : 适用于非oc对象 (一般用在变量身上)4. id
id : 万能指针,指谁都可以;
id = NSObject *
id作为参数时可以传入任何对象
id后面不要加*
5.构造方法
1.》对象成员变量默认初始化都是0
2》重写系统构造方法都需要先调用父类的方法
//调用父类的init方法,初始化父类中声明的一些成员变量和其他属性
- (instancetype)init
{
if (self = [super init]) {
}
return self;
}
//构造方法使用场合 : 初始化对象,为了让对象创建出来就有一些固定的值
注意点:先调用父类的构造方法,在进行子类内部成员变量的初始化
3》自定义构造方法注意点:
1》》一定是对象方法 -号开tou
2》》返回值一定是instancetype 类型
3》》方法名一般都是以 init 开头
4》设计原则,成员变量在那个类中,在那个类进行初始化
6.Category 分类
作用:可以给某一个类扩充一些方法(不修改原来类的代码)
使用注意:
1》只能增加方法,不能增加成员变量
2》方法中可以访问原来类的成员变量
3》可以重新实现原类中的方法,但是会覆盖掉原来的方法,(优先级高)
4》方法调用优先级 分类-》原来的类-》父类
7.类的本质
1》类的本质是一个类对象 class
2》获取一个类对象 可以使用类创建的对象 也可以使用类获取
Class p3 = [p class];
Class p4 = [p1 class];
Class p5 = [Person class];
//p3,p4,p5现在就是person这个类,可以直接调用person的类方法
。
3》程序刚启动的时候,会一次性加载项目中所有的类,类加载完毕后会调用类和分类的+load方法;先加载父类,再加载子类,
4》第一次使用这个类的时候,会调用+(void)initialize; 只会调用一次
+(void)initialize;
8.NSLog的本质
1》默认情况下,nslog和%@输出对象时,结果是:<类名 + 内存地址>
1》会调用对象的- (NSString*)description; 方法
2 》拿到- (NSString*)description;的返回值显示在屏幕上
3》- (NSString*)description;的返回值是 类名 + 内存地址 ,可以在类中重写这个方法,返回自己想要的打印结果。
//打印所在行数
NSLog(@"%d",__LINE__);
9.SEL
SEL : 指向类的方法地址 ;在程序运行时,会将每个方法包装成一个sel对象,person的对象调用方法时,isa根据相应的sel对象来寻找对应的方法。
是一种对方法的包装,将方法包装成sel类型的数据,去找对应的方法地址,找到方法地址调用此方法。
SEL的定义 :
//根据sel 调用类的对象方法;
// 间接调用 test方法
[p performSelector:@selector(test)];
// 可以带有参数
[p performSelector:@selector(test:) withObject:@"zhangsan"];
2.》创建一个sel对象 以及其他使用方法
SEL s = @selector(test);
[p performSelector:s];
》. 字符串转为sel方法
NSString *name = @"test";
SEL s = NSSelectorFromString(name);
[p performSelector:s];
》将方法转为字符串 _cmd等于自身这个方法
NSString *name = NSStringFromSelector(_cmd);
NSLog(@"name");