构造方法
是一个对象在初始化的时候执行的方法
init才是真正的构造方法
new方法执行2个方法
+alloc:去给对象分配一个内存空间;
-init;初始化这个对象;
如果super init没有执行成功或正确执行,则无法返回一个正确的对象,那么此时会返回0(nil);
如果super init执行成功了,会返回一个指针,那个值赋值给self,则self是一个非0数
对象全部在堆区,指针都是在栈区
执行自定义赋值操作
构造方法的操作有两种:
1,重写。
优点:实现简单。不足:不能够根据不同对象赋不同的值,属性的值是固定的
2,自定义构造
优点:使用灵活,可以根据不同的对象给属性设定不同的值,不足:写法比较麻烦一些
要注意 用@property生成的属性是private,子类要使用就要在父类属性自己写上属性
3 ,子类继承父类自定义构造的写法
在自定义构造时,要调用父类的自定义构造,而不是NSObject的init。这样才能隔离父类的变化。而且,父类的属性可以保持私有化private
堆区内存空间需要手动回收
栈区内存空间需要自动回收
oc只有重写,没有重载
static修饰全局变量,只能在本文件内访问,如果修饰的是局部变量,只能在第一个使用的时候才会创建,后面再使用都是复用
构造方法必须以init开头,且第二个单词开始首字母大写
id指针动态调用方法时,点语法不适用,必须强转
1,类与对象
2,定义类中的方法与属性
3,定义有参数的方法
4,封装属性 set与get方法
5,self调用方法或属性
6,super调用父类方法
7,继承
8 ,多态
9,id指针
10,组合->把一个对象当做另一个类的属性
11 ,@property->功能1 生成属性 2生成get与set声明,实现set与get方法
12,属性的作用域
13,点语法
14,构造方法
15,NSString
Category
:把一个类分作多个部分
作用:
不该变原有的类,去给原来有的类添加功能(方法)
写法:
命名:原有的类名+分类名
声明:
@interface Person(分类名)
// 你要添加的功能......
@end
实现
@implementation Person(分类名)
// 实现你要添加的功能...
@end
好处:
1,可以把一个类分模块,便于协同开发,并优化类的结构
2,不该变类名,给类添加功能
注意的问题
1 分类不能写(添加)属性,只能写(添加)方法
2 分类中的方法不能与主类和其他分类重复,会覆盖其他类的方法
3 分类中可以直接用主类的属性,但是属性的权限要>=@protected
4. 不同分类中重写了同一个方法,那么哪个分类最后编译,则哪个分类的方法执行
5,主类永远在分类之前编译
编译顺序:父类->主类->分类(多个分类是可以调整顺序的)
分类的另一个用法:去给oc提供的类进行分类,添加额外的功能,如:NSString |
|