OC之property和自动释放池
- property实例
- property参数
- 自动释放池
一、property实例
1.前边的例子我们看到,我们在一个类中如果用到另外一个类的实例作为自己的成员变量时,通常需要在setter方法中,先release一下之前的,再retain一下新的。
这里我们只是有一个Book,如果我们再增加比如课程、老师等等可能包含很多,我们是否需要都这样来写呢?我们看的出来,非常麻烦。不用担心,Xcode给我们提供了特别方便的方法,就是给property传参数即可。
Student的声明方法
//
// Student.h
// Property的内存管理
//
// Created by apple on 14-3-26.
// Copyright (c) 2014年 apple. All rights reserved.
// #import <Foundation/Foundation.h>
@class Book; @interface Student : NSObject @property int age;
@property (nonatomic, retain) Book *book; @end
Student的实现方法
//
// Student.m
// Property的内存管理
//
// Created by apple on 14-3-26.
// Copyright (c) 2014年 apple. All rights reserved.
// #import "Student.h"
#import "Book.h" @implementation Student -(void)dealloc
{
[_book release];
[super dealloc];
} @end
我们只需要叫再dealloc中记得release即可,是否方便很多?
2.究竟可以传哪些参数呢?
1⃣️管理内存的参数
retain:把你的set方法中的内存管理帮你生成了。当参数是对象的时候都需要写上
assign:默认情况下,比如我们的int前边默认写的就是assign
copy:?问好表示占位符,我们以后具体讲
2⃣️读写的参数
readonly:只读,也就是只有getter方法
readwrite:读写,默认。也就是getter和setter方法都有
3⃣️线程安全
atomic:默认,在读写的时候加锁,保证线程的安全。(必然影响效率)
nonatomic:代表方法不需要考虑线程安全的问题。(我们通常在编程中使用nonatomic)
三、自动释放池
概念:将对象加入自动释放池,当自动释放池被释放的时候,加入里面的所有对象,都release一次
用法:对象调用autorelease即可将对象加入最近的自动释放池
例子:写一个快速建立对象的方法
//声明
+(id)student;
//实现
+(id)student
{
return [[[Student alloc] init] autorelease];
}
//调用
Student *stu = [Student student];
OC之property和自动释放池的更多相关文章
- OC中对象元素的引用计数 自动释放池的相关概念
OC中数组对象在是如何处理对象元素的引用计数问题的,同时介绍一下自动释放池的相关概念 一.数组对象是如何处理对象元素的引用计数问题[objc] view plaincopy 1. // 2. / ...
- OC学习篇之---数组对象的引用计数问题和自动释放池的概念
之前一片文章中我们介绍了OC中的两个关键字@property和@synthesize的使用的使用: http://blog.csdn.net/jiangwei0910410003/article/de ...
- OC对象,自动释放池,OC与C语言的区别
在C语言中,编程都是面向过程的编程,每一个代码块都严格按照从上至下的顺序执行,在代码块之间同样也是这样, 但是在OC中往往不是这样,OC和C++.java等语言一样,都是面向对象的编程语言,在代码的执 ...
- C++模拟OC的多重自动释放池
使用过OC的都知道,OC的引用计数机制用起来还比较方便.于是就仿照OC的形式搞了个C++引用计数. 支持多重自动释放池,每次autorelease都会放到栈顶的自动释放池中. 自动释放池也可以像变量一 ...
- 63 (OC)* NSAutoreleasePool 自动释放池
目录 0:ARC 1: 自动释放池 2:NSAutoreleasePool实现原理 3:autorelease 方法 4: Runloop和Autorelease的关系 5: Using Autore ...
- OC 内存泄露 自动释放池
花絮:看到下面的代码就想起这么一个调侃: 一个老程序员,功成名就,金盆洗手不在写代码后,决定练练书法.提笔思索良久后在纸上写下:Hello world! /********************** ...
- OC自动释放池autoreleasepool介绍
自动释放池的机制是:它使得应用在创建新对象时,系统能够有效地管理应用所使用的内存. @autoreleasepool { statements } 在创建新对象时,并且系统未启动ARC特性,那么在使用 ...
- 04-OC属性的使用、自动释放池、封装和继承
目录: 一.IOS6声明式属性的使用 二.autoreleasepool自动释放池 三.封装.继承 回到顶部 一.IOS6声明式属性的使用 注:声明式属性默认情况下,并没有解决内存问题, 当使用@pr ...
- OC_内存管理(二)对象复制、循环引用问题、自动释放池
循环调用: 1.循环引用的问题 两个对象A.B,有可能会出现特殊情况:A中包含B的实例变量:B中也包含A的实例变量,如果这两个实例变量都是强引用(A有着B的实例变量所有权,B也有A的实例变量所有权 ...
随机推荐
- emWin5.24 VS2008模拟LCD12864 stm32 RTX移植 【worldsing笔记】
emWin for 12864 并口移植 源代码下载:RTX_emWin5.24_Keil_VS2008-20141122.zip 硬件环境: CPU: stm32f103ve LCD:st7 ...
- UVaLive 6602 Counting Lattice Squares (找规律)
题意:给定一个n*m的矩阵,问你里面有几面积为奇数的正方形. 析:首先能知道的是,大的矩阵是包括小的矩阵的,而且面积为奇数,我们只要考虑恰好在边界上的正方形即可,画几个看看就知道了,如果是3*3的有3 ...
- JS鼠标滚动事件
-----------------------------//鼠标滚动事件以下是JS临听鼠标滚动事件 并且还考虑到了各浏览器的兼容----------------------------------- ...
- 建表的sql
1. 创建用户表 create table user( id int unsigned not null primary key auto_increment comment '自增id', user ...
- .NET/C#- EPPLUS DEMO
强大的导出EXCEL,比NPOI更好用,更强大,可惜只有4.0版本的. 记录一下DEMO var sheet = p.Workbook.Worksheets.Add("My Sheet&qu ...
- 转载:Erlang 资源
Erlang资源 erlang豆瓣广播
- 编写 Window 服务程序
编写 Window 服务程序 一.直观认识Windows服务. 打开Windows“控制面板/管理工具/服务”,系统显示Windows服务列表. ...
- cocos2dx json数据解析
转自:http://blog.csdn.net/wangbin_jxust/article/details/9707873 cocos2dx本身没有json解析类库,我们这里引入libjson进行解析 ...
- Android平台NDK编程
转自:http://blog.csdn.net/wangbin_jxust/article/details/37389383 之前在进行cocos2dx开发时,已经详细介绍了如何将win32的c++代 ...
- XPath具体解释
New Document 相关读书笔记.心得文章列表 一.结点类型 XPath中有七种结点类型:元素.属性.文本.命名空间.处理指令.凝视以及文档节点(或成为根节点). 文档的根节点即是文档结点:相应 ...