• 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和自动释放池的更多相关文章

  1. OC中对象元素的引用计数 自动释放池的相关概念

    OC中数组对象在是如何处理对象元素的引用计数问题的,同时介绍一下自动释放池的相关概念 一.数组对象是如何处理对象元素的引用计数问题[objc]  view plaincopy 1. //   2. / ...

  2. OC学习篇之---数组对象的引用计数问题和自动释放池的概念

    之前一片文章中我们介绍了OC中的两个关键字@property和@synthesize的使用的使用: http://blog.csdn.net/jiangwei0910410003/article/de ...

  3. OC对象,自动释放池,OC与C语言的区别

    在C语言中,编程都是面向过程的编程,每一个代码块都严格按照从上至下的顺序执行,在代码块之间同样也是这样, 但是在OC中往往不是这样,OC和C++.java等语言一样,都是面向对象的编程语言,在代码的执 ...

  4. C++模拟OC的多重自动释放池

    使用过OC的都知道,OC的引用计数机制用起来还比较方便.于是就仿照OC的形式搞了个C++引用计数. 支持多重自动释放池,每次autorelease都会放到栈顶的自动释放池中. 自动释放池也可以像变量一 ...

  5. 63 (OC)* NSAutoreleasePool 自动释放池

    目录 0:ARC 1: 自动释放池 2:NSAutoreleasePool实现原理 3:autorelease 方法 4: Runloop和Autorelease的关系 5: Using Autore ...

  6. OC 内存泄露 自动释放池

    花絮:看到下面的代码就想起这么一个调侃: 一个老程序员,功成名就,金盆洗手不在写代码后,决定练练书法.提笔思索良久后在纸上写下:Hello world! /********************** ...

  7. OC自动释放池autoreleasepool介绍

    自动释放池的机制是:它使得应用在创建新对象时,系统能够有效地管理应用所使用的内存. @autoreleasepool { statements } 在创建新对象时,并且系统未启动ARC特性,那么在使用 ...

  8. 04-OC属性的使用、自动释放池、封装和继承

    目录: 一.IOS6声明式属性的使用 二.autoreleasepool自动释放池 三.封装.继承 回到顶部 一.IOS6声明式属性的使用 注:声明式属性默认情况下,并没有解决内存问题, 当使用@pr ...

  9. OC_内存管理(二)对象复制、循环引用问题、自动释放池

      循环调用: 1.循环引用的问题 两个对象A.B,有可能会出现特殊情况:A中包含B的实例变量:B中也包含A的实例变量,如果这两个实例变量都是强引用(A有着B的实例变量所有权,B也有A的实例变量所有权 ...

随机推荐

  1. 利用一些码农Trick去搞一搞G和T的单词

    根据自然语言处理中的Zipf统计定律,在自然语言的语料库里,一个单词出现的频率与它在频率表里的排名成反比.因此,我们有理由认为,可以根据这个频率表进行一下排序,以及purning.由于精力有限,没有足 ...

  2. static和extern的区别

    extern(外部) 1.对函数      完整的定义一个外部函数(可以省略extern)      完整的声明一个外部函数(可以省略extern) 2.对变量      只能声明一个外部变量(不能省 ...

  3. 观察者模式:关于通知的使用(NSNotificationCenter)

    一.通知的使用方法 1.发出通知 例如:[[NSNotificationCenter defaultCenter]postNotificationName:@"backToFirstPage ...

  4. 转载 在 Linux 虚拟机中手动安装或升级 VMware Tools

    http://pubs.vmware.com/workstation-12/index.jsp?lang=zh_CN&topic=/com.vmware.ws.using.doc/GUID-0 ...

  5. C++STL学习笔记_(3)stack

    10.2.4stack容器 Stack简介 ²  stack是堆栈容器,是一种"先进后出"的容器. ²  stack是简单地装饰deque容器而成为另外的一种容器. ²  #inc ...

  6. C# 浅拷贝与深拷贝

    浅拷贝:给对象拷贝一份新的对象引用地址:(只是给一个对象多起了个名字,所以,当改变拷贝的某个属性的时候,原对象的对应属性亦会改变).浅拷贝的定义—— 只对值类型(或string)类型分配新的内存地址: ...

  7. OC:Block语法、Block使用、Block实现数组排序

    Block //定义一个求两个数最大值函数 int maxValue (int ,int); //函数的实现 int maxValue (int a, int b){ return  a > b ...

  8. 文件字符读写函数fscanf()和 fgets() 比较

    一. 文件格式化读入函数 fscanf()  int  fscanf(文件指针,格式化字符串,输入列表); 返回值: 整形,输入列表中定义字符串的个数. 1, 例如读取字符串: char  str1[ ...

  9. VS2010开发环境最佳字体及配色[转]

    从地址:http://www.dev-club.net/xiangxixinxi/42010072906150537/201103010518006.html 获取的,整理如下: 环境:VS2010字 ...

  10. php 将字符串中的连续多个空格转换为一个空格

    转载自:http://www.phpernote.com/php-function/633.html /** * 多个连续空格只保留一个 * * @param string $string 待转换的字 ...