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];
原文地址:https://www.cnblogs.com/letougaozao/p/3625385.html