美文网首页
封装/代理/内存管理

封装/代理/内存管理

作者: Sherry宇 | 来源:发表于2016-02-24 10:09 被阅读0次

封装

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消息:获得对象当前的引用计数器

一旦对象被回收了.那么他占据的储存空间就不再可用,坚持使用就会导致程序崩溃(野指针错误)

相关文章

  • 封装/代理/内存管理

    封装 Set方法 在开发过程中,考虑到安全性要求,我们一般不在成员变量名前面使用@public、@protecte...

  • Caffe源码分析-syncedmem内存

    Caffe为了简化CPU主机和GPU内存管理,采用了一个syncedmem类来封装了这两部分的内存管理,其中它主要...

  • Caffe源码解读:syncedmem类

    内存同步(syncedmem)类的作用在于管理主机(CPU)和设备(GPU)之间的内存分配和数据同步,封装了二者之...

  • ios面试

    delegate 为啥assign weak修饰 一般使用代理都会设置控制器为代理,在内存管理角度说引用计数会加...

  • 【自学java】 代理模式

    简单的几句话讲能不能讲明白代理模式…… 一、简介 什么是代理模式答: 代理模式是一种封装,将被代理对象封装到代理对...

  • Effective Objective-C 2.0 编写高质量

    内存管理语义属性用于封装数据,而数据则要有“具体的所有权语义”(concrete ownership semant...

  • OC 语言相关

    引文: 多线程相关 OC 语言相关 内存管理相关 UI视图相关 RunLoop相关 分类 关联对象 扩展 代理 通...

  • Effective C++学习笔记(第三章)

    条款13:以对象管理资源 为防止内存资源泄露,当申请到内存资源后,最好立即以对象方式进行封装,即RAII的方式。比...

  • 基础模块封装 -- 图片加载

    一、图片加载管理类 二、图片加载封装类 三、图片大小封装类 四、内存缓存策略类 五、磁盘缓存策略类 六、图片加载回调类

  • iOS内存管理详解

    目录 block内存管理 autorelease内存管理 weak对象内存管理 NSString内存管理 new、...

网友评论

      本文标题:封装/代理/内存管理

      本文链接:https://www.haomeiwen.com/subject/upiukttx.html