zoukankan      html  css  js  c++  java
  • 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];
  • 相关阅读:
    Maven介绍
    自考:计算机网络原理 2018版 李全龙 课后习题答案
    jmeter分布式部署遇到的坑
    mysql循环 insert插入多条数据
    认识Nacos.
    mysql中where子句中使用别名查询出现问题
    python之bytes和string相互转换
    什么叫线圈?什么寄存器?什么叫保持寄存器?
    Modbus-RTU详解(转载)
    python进制之间的转换函数
  • 原文地址:https://www.cnblogs.com/letougaozao/p/3625385.html
Copyright © 2011-2022 走看看