OC第十课

主要内容:内存管理高级(昨天的延伸)

一、属性内部的实现原理

1、assign

setter方法

- (void)setAge:(NSInteger)age

{

_age = age;

}

getter方法

- (NSInteger)age

{

return  _age;

}

2、copy

@synthesize  name = _name;

setter方法

@property  (nonatomic , copy) NSString  *name;

- (void)setName:(NSString *)name

{

if (_name != name) {

[ name  release ] ;

_name = [ name copy ] ;

}

}

getter方法

- (NSString  *)name

{

return  [ [ _name retain ] autorelease ] ;

}

3、retain

@synthesize  name = _name;

setter 方法

@property  (nonatomic , retain ) NSString  *name;

- (void) setName:(NSString  *)name

{

if (_name != name) {

[ name  release ] ;

_name = [ name retain ] ;

}

}

- (NSString  *)name

{

return  [ [ _name  retain ]  autorelease ] ;

}

二、dealloc方法

- (void)dealloc

{

[ _name  release ] ;

[super  dealloc] ;

}

作用:在对象引用计数为0时,系统自动调用(通常我们在dealloc中释放类的实例变量)

dealloc是NSObject的一个实例方法,与alloc对应,用于回收开辟的内存空间

注意:

1、永远不要手动调用dealloc

2、在dealloc的最后一行,必须要写 [ super  dealloc ] ;

三、便利构造器的内存管理

+(instancetype)personWithName:(NSString  *)name

age:(NSInteger)age;

{

return  [ [ [ Person  alloc ]  initWithName:name  age:age ]  autorelease ] ;

}

四、collection的内存管理(集合会管理自己的元素)

collection就是NSArray、NSDictionary。。等容器类

collection会自动管理自己内部的元素

注意:

1、加入collection中的对象会被retain

2、移除出collection的对象会release

3、collection被释放会对内部所有元素release

示例:

Person.h文件

@interface  Person : NSObject

#pragma  mark  -  声明属性

@property  (nonatomic , sopy) NSString  *name ;

@property  (nonatomic , retain) NSString  *gender;

@property  (nonatomic , assign) NSInteger  age;

#pragma  mark  -  声明方法

#pragma  mark  初始化方法

- (instancetype)initWithName:(NSString  *)name

gender:(NSString)gender

age:(NSInteger)age ;

#pragma  mark  便利构造器

+ (instancetype)personWithName:(NSString)name

gender:(NSString  *)gender

age:(NSInteger)age ;

@end

Person.m文件

@implementation  Person

#pragma  mark  -  重写setter和getter方法

#pragma  mark  name

- (void)setName:(NSString  *)name

{

if (_name  !=  name) {

[ name  release ] ;

_name = [ name  copy ] ;

}

}

- (NSString  *)name

{

return  [ [ _name  retain ]  autorelease ] ;

}

#pragma  mark  gender

- (void)setGender

{

if (_gender  != gender) {

[ gender  release ] ;

_gender  =  [ gender  retain ] ;

}

}

- (NSString  *)gender

{

return  [ [ _gender  retain ]  autorelease ] ;

}

#pragma  mark  -  实现方法

#pragma  mark  初始化方法

- (instancetype)initWithName:(NSString  *)name

gender:(NSString)gender

age:(NSInteger)age

{

if (self = [ super  init ] ) {

self.name = name;

self.gender = gender;

self.age = age;

}

return  self ;

}

#pragma  mark  便利构造器

+ (instancetype)personWithName:(NSString)name

gender:(NSString  *)gender

age:(NSInteger)age

{

return   [ [ [ Person  alloc ]  initWithName:name  gender:gender  age:age ]  autorelease ] ;

}

#pragma  mark  -  重写dealloc方法

- (void)dealloc

{

[ _name  release ] ;

[ _gender  release ] ;

[ super  dealloc ] ;

}

@end

时间: 2024-10-30 03:46:14

OC第十课的相关文章

python学习第十课 多路复用、ThreadingTCPServer、线程与进程

python 第十课 多路复用 I/O多路复用指:通过一种机制,可以监视多个描述符,一旦某个描述符就绪(一般是读就绪或者写就绪),能够通知程序进行相应的读写操作 select    poll          epoll 网络操作.文件操作.终端操作等均属于IO操作,对于windows只支持Socket操作,其他系统支持其他IO操作,但是无法检测.如普通文件操作自动上次读取是否已经变化.所以主要用来网络操作 windows 和 mac的python 只提供select,linux上的python

NeHe OpenGL教程 第十课:3D世界

转自[翻译]NeHe OpenGL 教程 前言 声明,此 NeHe OpenGL教程系列文章由51博客yarin翻译(2010-08-19),本博客为转载并稍加整理与修改.对NeHe的OpenGL管线教程的编写,以及yarn的翻译整理表示感谢. NeHe OpenGL第十课:3D世界 加载3D世界,并在其中漫游: 在这一课中,你将学会如何加载3D世界,并在3D世界中漫游.这一课使用第一课的代码,当然在课程说明中我只介绍改变了代码. 这一课是由Lionel Brits (βtelgeuse)所写的

【C++探索之旅】第一部分第十课:文件读写,海阔凭鱼跃

内容简介 1.第一部分第十课:文件读写,海阔凭鱼跃 2.第一部分第十一课预告:小练习,猜单词 文件读写,海阔凭鱼跃 上一课<[C++探索之旅]第一部分第九课:数组威武,动静合一>中,我们学习了动态数组和静态数组,也看到其实字符串很类似字符数组(到了之后的第二部分,学习面向对象,我们会知道其实string是一个类). 到目前为止,我们写的程序还比较简单,当然了,因为我们刚开始学习C++嘛.但只要加以训练,我们就慢慢地能够写一些真正的应用了.我们也开始逐渐了解C++的基础知识了,不过缺了很重要的一

Kali Linux Web 渗透测试— 第二十课-metasploit.meterpreter

Kali Linux Web 渗透测试— 第二十课-metasploit.meterpreter 原文链接:http://www.xuanhun521.com/Blog/7fc11b7a-b6cb-401d-8641-5202c9b7864a 文/玄魂 目录 Kali Linux Web 渗透测试— 第二十课-metasploit.meterpreter........................ 1 Meterpreter..................................

【C语言探索之旅】 第一部分第十课:练习题+习作

内容简介 1.课程大纲 2.第一部分第十课: 练习题+习作 3.第二部分第一课预告: 模块化编程 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写三个游戏. C语言编程基础知识 什么是编程? 工欲善其事,必先利其器 你的第一个程序 变量的世界 运算那点事 条件表达式 循环语句 实战:第一个C语言小游戏 函数 练习题 习作:完善第一个C语言小游戏 C语言高级技术 模块化编程 进击的指针,C语言王牌 数组 字符串 预处理 创建你自己的变量类型 文件

【二毛SEO教程】第十课:SEO操作-内容建设

前几课小结: 1. 关键词:三大标签(首页.内容页) 2. 标签:alt/nofollow 3. 404.地图.robots.txt(页面) 301 1-3个月 4. URL的唯一性 小提示:什么时候需要做301? A B C 三个页面同时指向一个URL,此刻做301避免权重分散,1-3月见效. 第十课正文: 如何做好网站内容建设?图文转换软件 1. 什么样网站内容能帮助网站提升排名?原创.相关性.对用户有作用(锚文本)压瓦机 价格.产品说明.售后情况 彩钢设备,双层压瓦机 机械产品知识 设计机

ali Linux Web 渗透测试视频教—第二十课-利用kali linux光盘或者usb启动盘破解windows密码

Kali Linux Web 渗透测试视频教—第二十课-利用kali linux光盘或者usb启动盘破解windows密码 文/玄魂 目录 Kali Linux Web 渗透测试视频教—第二十课-利用kali linux光盘或者usb启动盘破解windows密码.......................................................................................................................

MFC—第十课(一)学习笔记

F编程练习—第十课 知识清单 图形的绘制 设置对话框 颜色对话框 字体对话框 如何在窗口中显示一幅位图 (1)添加一个菜单 绘图 (2)在这个菜单中添加四个菜单项 点,直线,矩形,椭圆 (3)分别为这四个菜单项添加命令响应 注意:class name选择:view类 下面是在view类中新增的四个函数 F编程练习—第十课 知识清单 图形的绘制 设置对话框 颜色对话框 字体对话框 如何在窗口中显示一幅位图 (1)添加一个菜单 绘图 (2)在这个菜单中添加四个菜单项 点,直线,矩形,椭圆 (3)分别

BeagleBone Black板第十课:测试PWM功能

BBB板第十课:测试PWM功能 上一节课我们初步学习了BBB板上ADC数据的读取方法,本节课将把学到的PWM的知识贡献给和我一样的初学者.以下这张彩图来自网上,详细标明了14个PWM和四个定时器的引脚位置.本实验中,我们只测试其中的P8_13引脚,名称为eHRPWM2B. 需要准备的实验工具:一个二极管发光管和数字万用表及其他小线材 一.PWM知识(部分知识直接摘自网上) PWM全称Pulse WidthModulation,脉冲宽度调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有