oc的内存管理和@property的属性关键字

基于 MATLAB 的综合能源系统建模:全面解析与案例应用  本文详细介绍了基于 MATLAB 的综合能源系统建模相关知识,包括 MATLAB 在综合能源建模中的优势、综合能源系统各组件和网络的建模方法,并通过园区综合能源系统的案例展示了从建模到优化调度求解以及结果分析的全过程。在当今全球能源格局深刻变革的背景下,综合能源系统(Integrated Energy System,IES)作为一种创新的能源供应体系,整合了多种能源形式,如电力、热力、燃气等,以实现能源的高效生产、传输、分配和利用。需要考虑燃气的压力、流量特性以及管道的阻力特性等。 阅读详情

我们来看看内存分布

栈:存放的是局部变量,这块存储区域是系统管理的,不需要我们管理。

堆:存放的是OC中的对象,这块存储区域是程序员自己管理的。它是动态存储区域。

常量区:存放的是常量,这块存储区域是系统管理的。

全局区:存放的时全局变量和静态变量,这块存储区域是系统管理的。

代码区:存放分是代码,这块区域是系统管理的。


指针存放在栈中,而指针指向的变量是存放在堆中。因此当指针被回收的时候,它的对象并不会被回收。

MRC(Manual Reference Counting)手动内存管理|手动引用计数

在OC的内存管理中:引进了引用计数。

1、当一个对象被建立的时候,它的引用计数是1。

2、当一个对象的引用计数是0的时候,这个对象将会被回收。


引用计数

1、release 引用计数-1

2、retain  引用计数+1 (这里还会返回一个调用该方法的对象)

3、retainCount 返回当前对象的引用计数

手动内存管理黄金法则:

谁调用alloc\new\retain\copy\mutableCopy,谁就调用相应的release|autorelease;

当你需要某一个对象的时候,那么就给它发送一条retain方法。

当你不需要某一个对象的时候,那么就给它发送一条release方法。

内存管理不当产生的后果:

1、如果不再使用的对象没有被回收,就会照成内存泄露。会导致程序闪退。

2、如果正在被使用的对象被回收了,就会照成野指针错误。会导致程序崩溃。


内存管理中的关键字(@property)

retain在setter和getter方法中加入一些内存管理的代码(当属性是一个普通的OC对象的时候就使用retain)

assign表示的时直接复制,不会产生内存管理的代码(当属性是一个基本数据类型的时候就使用assign)

copy表示复制对象(当属性是NSString数据类型的时候就使用copy)

在@property中的关键字还有

  生成多线程线程安全的关键字

nonatomic表示非原子的,不会生成线程安全的代码,速度比较快。iOS中的属性一般都是使用它。

atomic表示原子的,它会生成线程安全的代码。

控制权限的关键字

readonly表示可以读,只能生成getter方法。

readwrite表示可以读可以写,生成getter和setter方法的声明与实现。

修改方法名称的关键字

getter表示修改生成的getter方法的名称。一般情况下,BOOL类型的属性的getter方法都是以is开头的。

setter表示修改生成的setter方法的名称,不过一般不修改。


循环引用:

指针的是两个对象中,你中有我,我中有你。跟java中的一对一很相似。至于产生内存泄露的原因主要是相互之前强指针指着对方,感觉跟java里面谁来hibernate设置谁来管理对方。(在这里我们引入了强指针与弱指针在ARC中会提到,这里不做解释。)

解决循环引用的方式:让其中一方设置为assign。

多个对象之间不要封闭环,如果出现封闭的环,那么环中所有的对象将得不到释放。解决的方法,让其中一端为虚线。


自动释放池:(自动释放池是一个栈)

autorelease:延长对象的释放生命周期。作用:把对象放进离自己最近的那个自动释放池中。(它与对象在何地创建没有关系,只要标记上就放进离自己最近的那个自动释放池中。)

当自动释放池销毁的时候,它会把放在池中的所有对象进行一次release操作。

调用几次autorelease,在自动释放池销毁的时候就调用几次release操作。

在自动释放池中,只要是使用getter方法|构造方法返回来的对象都是放在池中。

ARC(automatic Reference Counting)自动内存管理

ARC中编译器的特性:编译器会在适当的时候,加入内存管理的代码。

(_strong强指针标识符,默认所有的指针都是强指针)

作用:只要强指针指向的对象,那么这个对象就不会被释放。

 只要没有强指针指向的对象,那么这个对象将会被立即被释放。

(_weak弱指针标识符)

弱指针:不参与内存管理,对内存管理没有影响。不会影响对象的回收。

注意:不要使用一个弱指针指向一个刚刚创建出来的对象,一旦这样做,刚创建出来的对象马上销毁,在OC中也是自动销毁机制。

当出现循环引用的时候就必须要让一端使用弱指针。


在ARC中的@property

strong  对所有的普通OC对象

copy 对字符串

assign 基本数据类型

weak 对于循环应用的时候,必须保证一段使用的是weak。如果不这样你懂的。


ARC中的自动释放池机制:

只要是通过方法返回来的对象都是存放在ARC的自动释放池中。



以上的测试代码如下:

#import"Person.h"

#import "Room.h"

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

//    Person *person = [[Person alloc]init];

//    long count = [person retainCount];

//    NSLog(@"%zd",count);

//    [person retain];

//    NSLog(@"%zd",[person retainCount]);

//    [person release];

//    NSLog(@"%zd",person.retainCount);

//    [person release];

//    //测试OC中有没有空指针异常(发现系统不会报错,并且什么都没做)

//    person = nil;

//    NSLog(@"%zd",person.retainCount);


//多对象的内存管理

    Person *person = [[Person alloc]init];//1

    Room *room = [[Room alloc]init];//1

    [person setRoom: room];//room = 2

    [room release];// room = 1

    room = nil;

    [person release];// person =0 room =0;

    person = nil;

    return 0;

}


/////////////////////////////

#import <Foundation/Foundation.h>

@class Room;


@interface Person : NSObject


@property(nonatomic,retain)Room *room;


//- (void)setRoom:(Room *)room;

@end


////////////////////////////

#import "Person.h"

#import "Room.h"


@implementation Person


//- (void)setRoom:(Room *)room{//这个跟@property(nonatomic,retain)Room *room生成的方法一致

//    //成员对象一创建的时候,就会被初始化为nil

//    //此处要加一个判断,判断两个对象是否是同一个对象。如果不相同,才需要内存管理的代码。

//    if(_room != room){

//        [_room release];

//        _room = [room retain];

//    }

////    [room retain];

////    _room = room;

//    //等于(因为retain会返回对象)

////    _room = [room retain];

////    [_room release];

////    _room = [room retain];

//  

//}

//永远不要试图自己调用这个方法

- (void)dealloc{

    

//    [_room release];

//    _room = nil;

    //等价于

    self.room = nil;//因为nil调用方法不会有任何变换。因此在上面的set方法中,不会让计数器加一

    

    //它会在对象回收的时候被打印出来

    NSLog(@"Person对象被回收了");

    

    //这个方法中必须调用父类的该方法,并且必须放在最后

    [super dealloc];

}

@end

/////////////////////////////

@interface Room : NSObject


@end


////////////////////////////

#import "Room.h"


@implementation Room

- (void)dealloc{

    NSLog(@"Room对象被回收了");

    //这个方法中必须调用父类的该方法,并且必须放在最后

    [super dealloc];

}

@end

vue使用 APlayer+Meting实现音乐播放,支持多平台音乐:网易云、腾讯、虾米、酷狗、百度   我之前写过一篇博客:使用 APlayer 实现音乐播放器,虽然 APlayer 让我实现了想要的音乐播放器效果,但是音频列表 audio 的音频链接、音频封面、歌词等,是需要自己去补充的。   那么这些数据从哪里来呢?   我昨天有发愁一会儿会儿,也去搜了获取音乐列表的接口,可以发请求去获取数据嘛。   也有瞅见MetingJS,A powerful plugin connect APlayer and Meting,一个连接APlayer和Meting的功能强大的插件,附上GitHub地址:https 阅读详情

相关推荐

硬件工程师八大细分岗位详解:从芯片到整机的技术分工与职业选择

硬件工程作为电子系统设计的核心领域,涉及从芯片级到整机级的完整技术链条。其基本原理是通过电路设计、信号处理和功率管理等技术,将电子元件集成为功能完备的硬件系统。随着产品复杂度提升,硬件工程师岗位出现高度专业化分工,这种细分不仅提升了技术深度,更优化了团队协作效率。在工程实践中,信号完整性和电源完整性成为高速数字设计的两个关键技术挑战,直接影响系统稳定性。本文基于行业热词"硬件工程师"和"信号完整性",深入解析八大细分岗位的技术差异,帮助从业者明确职业发展方向,构建系统化的硬件设计思维。

weixin_33811539的博客 450

【OC总结 属性关键字】

属性关键字就是用来修饰属性的关键字,保证了程序的正常运行。浅拷贝和深拷贝的区别?浅拷贝只是对 内存地址的复制,两个指针指向同一个地址,增加被拷贝对象的引用计数,没有发生新的内存分配。深拷贝:目标对象指针和源对象指针,指向两片内容相同的内存空间。2个特点:不会增加被拷贝对象的引用计数,产生了新内存分配,出现了2块内存。总结区别:浅拷贝增加引用计数,不产生新的内存。深拷贝不增加引用计数,会新分配内存copy关键字影响了对象的可变和不可变属性吗?

weixin_61639290的博客 1129

IAR调试CC1310的错误:Fatal error:Failed to connect to the XDS emlulator (Error -241 @ 0x0:)

从simplelink_cc13x0_sdk_2_10_00_36导入collector工程后,rebuild后进行debug,出现了如图错误:Fatal error:Failed to connect to the XDS emlulator (connect ICEPick)...(Error -241 @ 0x0)A router subpath could not be accessed....

qq_40417648的博客 6228

【OC】 属性关键字

声明一个时编译器会自动生成setter和getter方法。getter方法与变量名同名,setter方法在变量名前加set前缀并遵守驼峰命名法。另外,BOOL类型可以定义以is开头的getter方法,例如。使用 编译器会自动为你声明的属性添加setter和getter方法,方便使用点语法控制属性。使用 是告诉编译器,setter和getter方法已由用户实现,编译器无需添加。但是如果用户使用了,但是没有实现setter和getter方法,使用点语法调用属性,编译时不会警告,运行时会出错。如果两个都没使用,编

m0_63852285的博客 1606

DDR4 硬件设计笔记

DDR4-DRAM是第四代支持双倍数据读取,支持随机位置存取的静态存储器。DDR4-DRAM的工作原理。DDR之T拓扑和Fly-by拓扑。DDR的硬件设计。DDR4 PCB设计要点介绍。DDR4之PCB走线间距的串扰评估。DDR4之内存通道(channel)和内存列(rank)。

qq_26815321的博客 1万+

从零构建边缘AI数据管道:K230+ESP8266的物联网实践指南

本文详细介绍了如何利用K230开发板和ESP8266模块构建高可靠性的边缘AI数据管道,特别针对智能农业监测场景。通过完整的系统架构设计、AI模型部署、低功耗通信优化和云端集成方案,为开发者提供了一套可落地的物联网实践指南,重点解决了边缘计算环境下的数据传输稳定性和能效管理问题。

j2k3l4的博客 871

iOS开发之OC入门(常用关键字)

Objective-C的一些基础语法

weixin_46926959的博客 1295

HDR 人像肤色稳定实战:AE/AWB/ToneMap 冲突解耦与优先级裁决

人像 HDR 最容易“翻车”的就是**肤色飘**:AE 抢亮度、AWB 拉白点、TM 又在肩部压高光,三方各自“对”却合起来“错”。本文给出一套**工程可落地**的裁决策略:以**肤色 ROI 锚点**为最高约束,AE 先对脸部入射照度收敛,AWB 在**肤色先验 + 光源模型**下缓变,TM 采用**色相保持 + 中灰/肤色双锚**且时域一致化。配套**阈值与回归**(ΔE00、亮度漂移 RMS、频闪注入),把“主观对”的口径落到**可度量**,并给出逆光、多脸、霓虹等极端场景的**例外分流**。

努力分享一些人工智能、计算机视觉、影像等相关的知识干货! 1194

OC属性关键字和单例模式

如果一个类始终只能创建一个实例,则这个类被称为单例类。在程序中,单例类只在程序中初始化一次,所以单例类是储存在去全局区域,在编译时分配内存,只要程序还在运行就会一直占用内存,只有在程序结束的时候释放这部分内存。有三个注意点。

qq_73106050的博客 2474

YOLOv11 改进 - 下采样 | 轻量化突破:ADown 下采样让 YOLOv11 参量减、精度升

本文介绍了一种轻量级的特征下采样模块 ADown,它结合平均池化与最大池化策略,实现更有效的信息保留与压缩。在传统卷积网络中,特征下采样常造成信息损失,而 ADown 通过双通道并行结构优化了下采样效果,提升了模型的表达能力。在 YOLOv11 中引入 ADown 替换原有的下采样模块后,网络在保持高效性的同时,显著提升了目标检测的精度与稳定性。文章详细介绍了 ADown 的核心代码实现、模块注册流程以及 YOLOv11-ADown 模型的配置和训练方法,为轻量化目标检测模型的优化提供了实用参考。

魔改工程师的博客 1479

2026华为OD机考新系统真题 + 双机位C卷 + 往年真题 - 题库目录分值说明 + 考点说明+在线OJ

2026年4月1日起,华为OD机试正式切换至新系统模式!采用力扣模式,无需自己写输入! 难度大幅度降低。正在备考华为OD机试的同学,优先刷新系统机试真题,可大幅提升通过率。 新系统考题考点与旧版一致,无需重新适应。本专栏所有算法题均配有详细思路解析,并提供C语言、JS、C++、Python、Go、Java多语言源码实现。订阅后私信即可开通专属OJ刷题权限,高效备考一次上岸!

算法大师! 45万+

OC中内存管理以及@property的关键字

OC内存管理学习,不喜勿喷。

jpywan的专栏 753

基于截图详解:SAP GUI for Java 如何设置登录链接,以及 conn= 连接字符串该怎么写

摘要:SAP GUI for Java 的连接属性配置关键是在"高级"页签的"conn="后填写连接字符串。连接字符串格式取决于网络拓扑:直连应用服务器使用"/H/主机/S/端口";通过消息服务器负载均衡使用"/M/消息服务器/S/端口/G/组名";经SAProuter访问则需添加路由器前缀。配置时需注意专家模式会覆盖其他页签设置,且连接字符串还支持附加参数如客户端、语言和默认事务码。具体填写内容应根据Basis团队提供的系统信

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 250

【iOS】属性关键字

先前已经在iOS的学习过程中学习了一些属性关键词的简单用法,今天这篇博客来更加深入探讨iOS中的属性关键字以及温习深拷贝与浅拷贝自定义对象实现copy和mutableCopy都为深拷贝因为我们的自定义对象没有copyWithZone:和mutableCopyWithZone:两个方法,需要遵守SCopying和NSMutableCopying协议来实现这两个方法,也已经在上面的链接中具体实现推荐按照下面的格式来定义属性原子操作、读写权限、内存管理。

weixin_72437555的博客 1555

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

OC语法总结

1> 凡是从NSObject中继承的类都需要自己管理内存,在OC语法中,创建的任何一个对象都拥有一个引用计数器,第一次创建的时候这个引用计数器为1,当引用计数器的值为0时,该对象会被销毁。在xcode4.5以后版本的编译器环境中,会自动在.m文件中生成该属性getter和setter方法的标准实现,不需显示声明用@synthesize来生成属性的getter和setter方法实现。* 3. 如果即没有实现get方法,也没有实现set方法,则@synthesize会自动生成属性的get和set方法实现。

2501_90210016的博客 1002

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

【Objective-C】浅析OC中的属性关键字

复习了常见的属性关键字 主要是内存管理部分 简单了解类属性class

XY_Mckevince的博客 773

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

「OC」源码学习——属性关键字

其实属性就是成员变量和自动编写的存取方法。

aa2002aa的博客 473

OC语言初步学习

(返回值类型)方法名:(参数类型)参数名 参数标签:(参数类型)参数名 ...;方法类型标识(实例方法)或(类方法)。返回类型:如voidintNSString *等。方法名:包含基础名和参数标签,例如。参数类型:每个参数在括号中声明其类型,例如。特性实例方法(-)类方法(+)归属属于对象实例属于类本身调用方式[对象 方法名][类名 方法名]访问权限可以访问实例变量和属性只能访问类变量(静态变量)或创建对象常见用途操作对象的状态、行为工具方法、工厂方法、单例访问。

wzm20070304的博客 411

【OC】属性关键字

属性关键字是oc中基础且相当重要的知识点,之前学的时候有所接触但学的没有那么深入,这次便深入介绍一下其相关内容这次算是学习了当时没学到的部分属性关键字和深浅拷贝的更全面的内容,以后学到新的还会继续补充。

2401_86200358的博客 812

OC中@property属性关键字的使用(assign/weak/strong/copy)

一、assign 用于 ‘基本数据类型’、‘枚举’、‘结构体’ 等非OC对象类型 eg:int、bool等   二、 weak 1. 一般应用: UI控件 2. 详细说明: (1)为什么建议UI控件一般使用weak?首先我们从controller来看,controller是被系统用强指针引用着,所以如果 controller 还存在,里面的子控件也会存在,

zhonghang优快云_Block的博客 855

OC-属性关键字

(其修饰的对象在被释放后,指针依然指向原对象地址,该指针成为悬垂指针,此时如果依然通过该指针访问原对象的话,就可能导致程序崩溃),之所以可以修饰基本数据类型,因为基本数据类型一般分配在栈上,栈的内存会由系统自动处理,不会造野指针。_weak一样,唯一的区别在于对象即使被销毁,指针也不会被自动置为nil,此时指针指向的是一个无用的地址(悬垂指针),如果使用此地址,程序会抛出BAD_ACCESS的异常。深拷贝:创建一个与被复制对象的值完全相同的对象,但是他们的地址是不同的,所以也称为内容拷贝。

2501_91546205的博客 863

OC开发之——@property内存管理(40)

一 概述 上一篇内存管理set方法避免内存泄漏到的步骤: - (void)setCar:(Car *)car { if(car!=_car) { [_car release]; _car=[car retain]; } } 本文使用@property (retain)来简化set方法的书写 二 一般内存管理代码 2.1 Book类 /...

我的博客 259

OC属性

1、OC属性的声明 关键字为@property @property (nonatomic,copy)NSString *gender; 声明完属性后我们在.m文件中使用@synthesize 关键字实现存取方法(这个会默认实现),通过@synthesize 我们可以把属性指向一个不同名称的实例变量 如下:name为属性名,possessionName为实例变量名 @synthesize

why的博客 704

[iOS] 属性关键字

这里我给出一个表格来去介绍大部分的属性关键字分类关键字作用说明原子性atomic (默认)保证多线程读写安全性能差,一般不用nonatomic不保证线程安全性能更好,iOS 开发中几乎都用这个性能更好,iOS 开发中几乎都用这个内存管理strong对象持有(引用计数 +1)常用于 OC 对象属性weak不持有对象,释放后自动置 nil常用于避免循环引用(如 delegate)常用于避免循环引用(如 delegate)assign直接赋值,不改变引用计数。

2501_91494333的博客 913

黑马程序员——OC语言加强---@property中的copy关键字

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- @property中的copy关键字 1、@property中copy的作用 分析代码:     //创建可变字符串     NSMutableString *str = [NSMutableString string];     //设定字符串的内容    str.s

lhp_heima的博客 474

oc @property属性简介

转载自:https://www.jianshu.com/p/ca25208d87c9 @property @synthesize关键字 这两个关键字是编译器特性,让xcode可以自动生成getter和setter的声明和实现。 1.atomic与nonatomic atomic:默认是有该属性的,这个属性是为了保证程序在多线程情况,编译器会自动生成一些互斥加锁代码,避免该变量的读写不同步问题。 nonatomic:如果该对象无需考虑多线程的情况,请加入这个属性,这样会让编译器少生成一些互斥加锁代码,可以提高

weixin_43553033的博客 275
上一篇: 关于qt的webview控件的滚动条样式自定义
下一篇: ARC Objective-c的内存管理
yangkping123
博客等级 码龄14年 5粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值