Objective-C内存管理第三弹:@property的使用

本文介绍了一个Objective-C程序实例,展示了如何使用内存管理关键字如retain、assign和copy,并解释了它们的作用及适用场景。同时,文章还涉及了线程安全关键字nonatomic和atomic的选择,以及属性的权限设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

//main.m

#import <Foundation/Foundation.h>
#import "Person.h"
#import "Room.h"

int main(int argc, const char * argv[]) {

    Person * p = [[Person alloc] init];
    Room * r = [[Room alloc] init];

    [p setSex:YES];

    BOOL sex = p.isMan;

    NSLog(@"%d", sex);

    p.room = r;

    [r release];

    p.room = r;

    Room * r2 = [[Room alloc] init];

    p.room = r2;

    [r2 release];
    r2 = nil;


    [p release];
    p = nil;


    return 0;
}

//Person.h

/*

 内存管理关键字:
 retain 就在setter和getter方法中加入一些内存管理的代码
 当属性为一个普通的OC对象的时候,使用retain

 assign 直接赋值,不生成内存管理代码
 当属性为基本数据类型的时候,使用assign

 copy复制对象,NSString对象一般使用copy

 线程安全的关键字:
 nonatomic:非原子性,不会生成线程安全的代码,速度快,iOS通常都是这种。

 atomic:原子性,会生成线程安全的代码

 控制权限:
 readwrite:可读可写,生成getter与setter方法是声明与实现

 readonly:只读,只生成getter方法

 修改方法名称:
 getter 修改生成的getter方法的名称
        一般情况下,BOOL类型的属性的getter方法是以is开头的。
 setter 修改生成的setter方法的名称
        一般不去修改它
 */

@interface Person : NSObject

@property (nonatomic, assign, getter=isMan,setter=setSex:) BOOL man;

@property (nonatomic, copy) NSString * name;

@property (nonatomic, assign) int age;

@property (nonatomic, retain) Room * room;

@end

//Person.m

#import "Person.h"

@implementation Person

- (void)dealloc
{
//    [_room release];
//    _room = nil;

    //简写:setter方法中先release再retain
    self.room = nil;

    NSLog(@"%s",__func__);
    [super dealloc];
}

@end

//Room.h

#import <Foundation/Foundation.h>

@interface Room : NSObject

@end

//Room.m

#import "Room.h"

@implementation Room

- (void)dealloc
{
    NSLog(@"%s",__func__);
    [super dealloc];
}
@end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值