封装
Set方法
在开发过程中,考虑到安全性要求,我们一般不在成员变量名前面使用@public、@protected等关键字修饰,而是使用Set方法来为对象提供成员变量的值。在set方法的内部也可以对一些不合理的赋值进行筛选过滤。
Set方法的作用:为外界提供一个设置成员变量值的方法
命名规范:
(1)方法名必须以set开头
(2)Set后面跟上成员变量的名称,首字母大写
(3)返回值一定是void
(4)一定要接收一个参数,而且参数类型需要和成员变量的类型一致
(5)形参名不能和成员变量名一样
Set方法的好处:
(1)不让数据暴露在外,保证了数据的安全性
(2)对设置的数据进行过滤
Set方法使用示例:
/*******Set方法的声明:********/
/*******Set方法的声明:********/
Get方法
Get方法的作用:为调用者返回对象内部的成员变量
命名规范:
(1)一定有返回值,返回值的类型和成员变量的类型一致
(2)方法名和成员变量名一样
(3)不需要接收任何参数
Get方法使用示例:
/******Get方法的声明:******/
-(NSString*)getName;
-(NSString*)getSex;
-(NSInteger)getAge;
/******Get方法的实现*****/
-(NSString*)getName{
return_name;
}
-(NSString*)getSex{
return_sex;
}
-(NSInteger)getAge{
return_age;
}
self关键字
self在实例方法减号方法,使用代表调用对象
self在类方法加号方法中使用代表使用它的类
self的用途:
可以利用self->成员变量名访问当前对象的内部的成员变量(仅在对象方法中)
【self 方法名】;可以调用其他的对象方法或者是类方法
*********************************************************************************
代理
Protocol(协议)
1.Protocol:就一个用途,用来声明一大堆的方法(不能声明成员变量),不能写实现。
2.只要某个类遵守了这个协议,就拥有了这个协议中的所有方法声明。
3.只要父类遵守了某个协议,那么子类也遵守。
4.Protocol声明的方法可以让任何类去实现,protocol就是协议。
5.OC不能继承多个类(单继承)但是能够遵守多个协议。继承(:),遵守协议(< >)
6.基协议:是基协议,是最根本最基本的协议,其中声明了很多最基本的方法。
7.协议可以遵守协议,一个协议遵守了另一个协议,就可以拥有另一份协议中的方法声明。
/*******第一步:*******/
首先建立两个类:Boy和Girl
在Girl的.h文件中 实现第一步:声明代理
/*****第二步****/
声明代理:这里要注意协议用assign
第三步:代理人执行协议方法
//第四步:签订协议
//第五步:成为代理人
//实现协议方法
1.协议的定义
@protocol 协议名称<NSObject1qaqa>
方法声明列表
@end;
2.如何遵守协议
(1)类遵守协议
@protocol 类名:父类名 <协议名称1,协议名称2>
@end
(2)协议遵守协议
@protocol 协议名称 <其他协议名称>
@end;
3.协议方法声明中的关键字
(1)required (默认)要求实现,若没有实现则警告但不报错
(2)Optional 不要求实现
4.定义变量时遵守协议的限制
类名<协议名称> *变量名 NSObject<.Myprotocol> *obj;
Id <协议名称> 变量名 id <.Myprotocol> obj1;
5.Property中声明的属性也可以做遵守协议的限制
@property (nonatomic ,strong ) 类名<协议名称> *属性名;
@property (nonatomic ,strong ) id<协议名称> 属性名;
6.补充知识:协议本身写在.h头文件中,但也可以定义在任何地方。当这个协议只有这个类使用遵守时,一般把协议写在这个类里边,当这个协议需要多个类去实现时,就写在外边单独的文件中。
内存 管理
堆区内存的三种常见问题
1.野指针问题:访问没有所有权的内存,如果想安全访问,必须确保空间还在
2.过度释放:对同一块空间多次释放,程序立即crash
3.,内存泄漏:空间使用之后没有立即释放,存在安全隐患.
内存的三种管理机制
1.垃圾回收机制(gz):有系统来管理内存,系统识别空间何时不使用,自动回收空间,不适用于iOS开发,java采用该机制.
2.MRC:手动引用技术机制,有开发人员开辟和释放空间,并显示添加引用计数的代码,能够灵活的决定内存何时释放.
3.ARC:自动引用计数机制,是iOS 5.0推出的,也是苹果默认的内存管理机制,本质还是基于MRC,只不过是对于计数的修改是由系统自动实现的.
内存管理黄金法则:
如果你对一个对象做了alloc,copy,retain,操作之后你就拥有了对象的使用权,你就有责任对它进行release,或者autorelease.
简单理解:就看自己有没有使用alloc,copy,retain,这三个方法,如果使用了就对应上,release,或者autorelease.如果没有使用,就和自己无关,不用处理
使用注意:
自动释放池的创建和释放遵循栈规则
调用autorelease方法不会对引用计数器产生影响
autorelease方法延迟了对象的释放时间,占用内存较大的对象不要使用
一个对象不能多次调用autorelease方法
一个对象不能同时使用autorelease方法和release方法
retainCount消息:获得对象当前的引用计数器
一旦对象被回收了.那么他占据的储存空间就不再可用,坚持使用就会导致程序崩溃(野指针错误)