• 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];
  • 相关阅读:
    .NET 7.0 Preview 6、.NET 6.0.7、.NET Core 3.1.27 和 Visual Studio 2022 17.3 预览版也发布了
    Dapr中国社区活动之 分布式运行时开发者日 (2022.09.03)
    .NET MAUI 社区工具包 1.3版本发布
    .NET 7 SDK 开始 支持构建容器化应用程序
    Unity 将是驱动 C# 增长的引擎吗 ?
    .NET 7 RC 2 发布,倒计时一个月发布正式版
    SqlKata 方便好用的 Sql query builder
    开源数字基础设施 项目 Speckle
    使用autok3s 安装k3s 集群 和 kuboard 管理集群
    Dapr 证书过期了怎么办? 别慌,有救!
  • 原文地址:https://www.cnblogs.com/letougaozao/p/3625385.html
Copyright © 2020-2023  润新知