• 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];
  • 相关阅读:
    [CTSC2018] 暴力写挂
    [20220210联考] 传染
    [20220208联考] 差量
    [20220214联考] 树上的棋局
    [JSOI2004] 平衡点 / 吊打XXX
    [CodeChef] Maximum and Minimum
    [20220210联考] 一般图带权多重匹配
    [NOI2019] 弹跳
    不可视境界线
    08 | 白话容器基础(四):重新认识Docker容器
  • 原文地址:https://www.cnblogs.com/letougaozao/p/3625385.html
Copyright © 2020-2023  润新知