OC基础:内存(进阶):retain.copy.assign的实现原理 分类: ios学习 OC 2015-06-26 17:36 58人阅读 评论(0) 收藏
遍历构造器的内存管理
a.遍历构造器方法内部使用autorelease释放对象
b.通过遍历构造器生成的对象.不用释放.
内存的管理总结
1.想占用某个对象的时候,要让它的引用计数器+1(retain操作)
2.当不想再占用某个对象的时候,要让它的引用计数器-1(release操作)
3.谁alloc谁release,遍历构造器使用autorelease
另:当一个属性遵循了协议的时候(该属性就是代理),这时使用内存组的assign修饰.
多态:父类指针 指向 子类对象
没有继承就没有多态
父类可以指向子类对象,这个时候会有局限性,就是父类不能调用子类的特有的方法.
———————具体的retain copy assign的内部实现———————
Person.h
#import <Foundation/Foundation.h>
@interface Person : NSObject
@property (nonatomic,retain)NSString *name;
@property (nonatomic,assign)NSInteger age;
@property (nonatomic,copy)NSString *color;
-(id)initWithName:(NSString *)name
andAge:(NSInteger)age
andColor:(NSString *)color;
+(id)personWithName:(NSString *)name
andAge:(NSInteger)age
andColor:(NSString *)color;
@end
Person.m
#import "Person.h"
@implementation Person
@synthesize name=_name,age=_age,color=_color;
//retian
-(void)setName:(NSString *)name{
if (_name!=name) {
[_name release];
_name=[name retain];
}
}
-(NSString *)name{
return _name;
}
//assign
-(void)setAge:(NSInteger)age{
_age=age;
}
-(NSInteger)age{
return _age;
}
//copy
-(void)setColor:(NSString *)color{
if (_color!=color) {
[_color release];
_color=[color retain];
}
}
-(NSString *)color{
return _color;
}
-(id)initWithName:(NSString *)name
andAge:(NSInteger)age
andColor:(NSString *)color{
self=[super init];
if (self) {
_name=name;
_age=age;
_color=color;
}
return self;
}
+(id)personWithName:(NSString *)name
andAge:(NSInteger)age
andColor:(NSString *)color{
return [[Person alloc]initWithName:name andAge:age andColor:color];
}
-(void)dealloc{
[_name release];
[_color release];
[super dealloc];
}
@end
版权声明:本文为博主原创文章,未经博主允许不得转载。
OC基础:内存(进阶):retain.copy.assign的实现原理 分类: ios学习 OC 2015-06-26 17:36 58人阅读 评论(0) 收藏的更多相关文章
- OC基础知识总结 分类: ios学习 OC 2015-06-26 17:58 58人阅读 评论(0) 收藏
//OC: Objective-C, 面向对象的C语言 //OC与C的区别 //1.OC是C的超集, C语言的所有语法都可以在OC中使用 //2.OC是面向对象 //3.OC是一门运行时语言 //4. ...
- OC基础:属性.点语法.KVC 分类: ios学习 OC 2015-06-24 17:24 61人阅读 评论(0) 收藏
属性:快速生成setter和getter 属性也包括:声明和实现 1.属性的声明写在.h中 格式:@property 数据类型 变量名; 如果实例变量一致的时候,属性的声明可以合并,每一个属性之间使用 ...
- OC基础:NSString NSNumber 分类: ios学习 OC 2015-06-17 17:55 77人阅读 评论(0) 收藏
OC中的基本数据类型 NSString 在64位系统下,相当于long,在非64位系统下,想当于int. CGFloat 在64位系统下,相当于double,在非64位系统之下,想当与float ...
- OC基础:实例变量和成员变量的区别 分类: ios学习 OC 2015-06-14 17:59 16人阅读 评论(0) 收藏
摘要: Objective-C 引入了"实例变量"的概念,但同时, 也经常出现 "成员变量"的声音. 到底什么是实例变量,什么是成员变量,二者的区别是什么呢 ...
- C/C++的四大内存分区 分类: C/C++ 2015-05-09 01:36 163人阅读 评论(0) 收藏
导读 正确的理解C/C++程序的内存分区,是合格程序猿的基本要求. 网络上流形两大版本内存分区,分别为: 1. 五大内存分区:堆.栈.全局/静态存储区.自由存储区和常量存储区. 2. 五大内存分区:堆 ...
- 共享内存+互斥量实现linux进程间通信 分类: Linux C/C++ 2015-03-26 17:14 67人阅读 评论(0) 收藏
一.共享内存简介 共享内存是进程间通信中高效方便的方式之一.共享内存允许两个或更多进程访问同一块内存,就如同 malloc() 函数向不同进程返回了指向同一个物理内存区域的指针,两个进程可以对一块共享 ...
- 8大排序算法图文讲解 分类: B10_计算机基础 2014-08-18 15:36 243人阅读 评论(0) 收藏
排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存. 常见的内部排序算法有:插入排序.希尔排序. ...
- C语言基础总结 分类: iOS学习 c语言基础 2015-06-11 10:08 23人阅读 评论(0) 收藏
//欲练此功必先自宫!!! //第一天:C语言的基础 //进制 //2进制, 10进制, 8进制, 16进制 //注:8进制数前加0, 16进制数前加0x ...
- OC基础:内存(内存管理) 分类: ios学习 OC 2015-06-25 16:50 73人阅读 评论(0) 收藏
自动释放池: @autoreleasepool { } 内存管理机制 谁污染,谁治理 垃圾回收机制:gc(Garbage collection),由系统管理内存,开发人员不需要管理. OC ...
随机推荐
- 安装labelImage的问题qt
不知为何需要些source ~/.bash_profile才 自己在 ~/.bash_profile 中配置环境变量, 可是每次重启终端后配置的不生效.需要重新执行 : $source ~/.bash ...
- python tar 压缩解压
压缩: 1. import tarfile import os def tar(fname): t = tarfile.open(fname + ".tar.gz", " ...
- ubuntu 14.04 安装 gflags
1.下载 git clone https://github.com/gflags/gflags 2.编译 进入源码目录(即gflags文件夹) cmake . make -j 24 sudo make ...
- django URL路由基础
URL是Web服务的入口,用户通过浏览器发送过来的任何请求,都是发送到一个指定的URL地址,然后被响应. 在Django项目中编写路由,就是向外暴露我们接收哪些URL的请求,除此之外的任何URL都不被 ...
- 对不队—— Alpha冲刺
第三天 日期:2018/6/18 一. 今日完成任务:会议内容管理部分 冯晓.马思远:会议网站栏目管理开发,博客撰写 王爽.彭辉:参会人员管理开发 吴琼.郝延婷:审稿专家管理开发 1.1会议管理界面 ...
- 告诉maven,我真的不需要web.xml
<!-- 告诉maven,我真的不需要web.xml --> <plugin> <groupId>org.apache.maven.plugins</grou ...
- [ORA-28001: the password has expired]的处理
http://irikintwtr.com/wordpress/?p=420 alter profile default limit password_life_time unlimited; alt ...
- Ubuntu安装NVIDA显卡驱动
0. 综述 电脑型号:R720 Ubuntu版本:16 显卡型号:1050ti 目前,知道3种安装N卡驱动的方法: 1. PPA源:最简便,但未必有最新驱动(亲测),或可能遇到问题(风闻). sudo ...
- 雷林鹏分享:C# 正则表达式
C# 正则表达式 正则表达式 是一种匹配输入文本的模式..Net 框架提供了允许这种匹配的正则表达式引擎.模式由一个或多个字符.运算符和结构组成. 定义正则表达式 下面列出了用于定义正则表达式的各种类 ...
- Confluence 6 使用 LDAP 授权连接一个内部目录 - 服务器设置
名字(Name) 名字的描述将会帮助你在目录中识别.例如: Internal directory with LDAP Authentication Corporate LDAP for Authent ...