首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

带有合成属性的alloc + init - 它会导致保留计数增加2吗?

带有合成属性的alloc + init不会导致保留计数增加2。

在Objective-C中,alloc方法用于分配内存空间并返回一个指向该内存空间的对象。init方法用于初始化对象的属性和状态。当我们使用带有合成属性的alloc + init时,实际上是调用了对象的setter方法来设置属性的初始值。

在引用计数内存管理模型中,每个对象都有一个保留计数(retain count),用于跟踪对象被引用的次数。当对象的保留计数为0时,对象会被释放。

在alloc + init过程中,alloc方法会为对象分配内存空间并将保留计数设置为1。然后,init方法会进一步初始化对象的属性。在这个过程中,如果属性是使用合成属性(synthesize)生成的setter方法来设置初始值,那么该setter方法会自动处理保留计数的增加。

因此,带有合成属性的alloc + init过程中,保留计数只会增加1,而不会增加2。这是因为alloc方法已经将保留计数设置为1,而setter方法会将属性的保留计数再增加1。

需要注意的是,为了避免内存泄漏,我们需要在不再使用对象时适时地释放对象,即将保留计数减少到0。可以使用release或autorelease方法来减少保留计数。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

iOS @property探究(一): 基础详解你要知道@property都在这里

_customObject = [[CustomObject alloc] init]; } return _customObject; } @property指示符 在声明属性时候一般会带上几个指示符...*s = [[NSMutableString alloc] initWithString:@"Jiaming Chen"]; //设置p.name不会增加s引用计数,只是单纯将s指向地址赋给...strong、weak strong表示属性对所赋值持有强引用表示一种“拥有关系”(owning relationship),会先保留新值即增加新值引用计数,然后再释放旧值即减少旧值引用计数。...weak表示对所赋值对象持有弱引用表示一种“非拥有关系”(nonowning relationship),对新值不会增加引用计数,也不会减少旧值引用计数。...unsafe_unretained 使用unsafe_unretained修饰时效果与assign相同,不会增加新值引用计数,也不会减少旧值引用计数(unretained)当所赋值被销毁时不会被置为

1.6K90

iOS - 老生常谈内存管理(二):从 MRC 说起

ARC,系统使用与MRC相同引用计数系统,但是它会在编译时为我们插入适当内存管理方法调用。使用ARC,我们通常就不需要了解本文章中描述MRC内存管理实现,尽管在某些情况下它可能会有所帮助。...② 不释放不再使用数据会导致内存泄漏 内存泄漏是指没有释放已分配不再被使用内存。内存泄漏会导致应用程序不断增加内存使用量,进而可能导致系统性能下降或应用程序被终止。...使用访问器方法让内存管理更轻松 如果类中有对象类型属性,则你必须确保在使用过程中该属性赋值对象不被释放。因此,在赋值对象时,你必须持有对象所有权,让其引用计数加 1。...此外,属性可能正处于 “键值观测”(Key-Value Observation,KVO)机制监控之下,该属性观察者(observer)可能会在属性值改变时 “保留” 或使用这个即将回收对象。...);否则,autorelease对象会不断累积,导致内存占用量不断增加

1.5K21

《Objective C编程》笔记

4.在obj-c中,创见对象最常见途径就是使用allocinit,通常会将这两个消息写在一行代码中,并以嵌套形式连续发送(Apple推荐写法): [[NSDate alloc] init];...5.合并存取属性便捷方法: 在.h中国,通过@property声明属性,如 @property int w; 在impl中,要求编译器根据@property声明自动合成(synthesize)出存取方法...你要负责在不许要使用该对象时候释放之。以下时部分常见会“传输”所有权方法:alloc(后会跟一个init方法),copy和mutableCopy。...28.属性生命周期类型: a.unsafe_unretained(不需要自动归零,不需要保留):凡是非对象类型实例变量,都应该使用该特性。...29.关于atomic和nonatomic:通过属性机制自动生成存取方法时,如果相关属性带有nonatomic,那么调用速度会快一点点。建议使用nonatomic。

58930

iOS中setter方法 、getter方法、点语法、@property

属性概念 属性是OC一项特性,用于封装对象中数据 OC对象通常会把其所需要数据保存为各种属性 属性通过存取方法来访问(setter、getter) 例如:在Person类中定义了2属性 通过...点语法在等号左边,那么编译器会自动转换为setter方法,点语法在等号右边或没有等号,那么编译器会自动转化为getter方法 Person *per = [[Person alloc]init];...,编译器会自动编写访问这些属性所需要方法,这个过程叫“自动合成”。...lastName; @end //当你在通过点语法或调用方式时程序就会崩溃,因为并没有setter、getter方法 Person *per = [[Person alloc]init]; per.firstName...,所修饰对象销毁时,该属性不会被置为nil copy:设置方法并不保留新值,而是将其拷贝一份。

22210

iOS内存管理-基本概念整理

主要内容: 1.内存区域划分 2.内存管理/引用计数 3.MRC手动管理引用计数 4.ARC自动引用计数 5.内存泄漏问题 6.野指针问题 一、内存区域划分 程序在分配内存时,主要分为:栈区...alloc] init]; return obj; } - (id)object { id obj = [[NSObject alloc] init]; [obj autorelease...id obj = [[NSObject alloc] init]; [obj release]; [obj release]; //情况2:取得自己并不持有的对象对其释放,释放了非自己持有的对象而崩溃...__weak与__strong修饰符作用相反,表示弱引用,不会增加引用计数2.当对象被释放后,所有指向它弱引用都会被置为nil,这样避免了野指针问题。 3....情况2:__bridge_retained转换 id obj = [[NSObject alloc] init]; void *p = (__bridge_retained void *)(obj);

1.1K31

面经之《招聘一个靠谱iOS》import CYLBlockExecutor.himport CYLBlockExecutor.himport CYLNSObject+RunAtDeallo

为这种属性设置新值时,设置方法既不保留新值,也不释放旧值。此特质同assign类似, 然而在属性所指对象遭到摧毁时,属性值也会清空(nil out)。...ivar_list 中添加一个成员变量描述,在 method_list 中增加 setter 与 getter 方法描述,在属性列表中增加一个属性描述,然后计算该属性在对象中偏移量,然后给出...为这种属性设置新值时,设置方法既不保留新值,也不释放旧值。此特质同 assign 类似, 然而在属性所指对象遭到摧毁时,属性值也会清空(nil out)。...方法会导致程序崩溃;或者当运行到 someVar = var 时,由于缺 getter 方法同样会导致崩溃。...*mutableArray = [[NSMutableArray alloc] init]; NSArray *array = @[ @1, @2, @3, @4 ]; self.array = mutableArray

978100

【iOS 开发】Objective - C 面向对象 - 方法 | 成员变量 | 隐藏封装 | KVC | KVO | 初始化 | 多态

] init]; OCPerson *p2 = [[OCPerson alloc] init]; p1->_name = @"Tom"; p2->_name = @"Keen"; NSLog...] init]; OCPerson *p2 = [[OCPerson alloc] init]; p1->_name = @"Tom"; p2->_name = @"Keen"; NSLog...double 结构体 等数据类型;  -- 引用计数 : 对象引用计数大于 0 时, 该对象不会被回收, 基础数据类型不存在回收问题, 可以使用 assign 指示符; (2) atomic (nonatomic...定义属性, 将某个对象赋值给该属性时, 该属性原来所引用对象引用计数 -1, 被赋值对象 (成员变量) 引用计数 +1; -- 使用场景 : 在未启用 ARC 机制情况下, 常用, 启用后不常用;...指向对象也可能会被回收; 被 unsafe_unretained 修饰指示指针变量, 该指针不会被赋值为 nil, 可能导致程序崩溃; 5.

77610

【干货】PHP7强悍性能背后,zval变化!

第四, 我们知道PHP中, 大量计算都是面向字符串, 然而因为引用计数是作用在zval, 那么就会导致如果要拷贝一个字符串类型zval, 我们别无他法只能复制这个字符串....MAKE_STD_ZVAL(tmp); array_init(tmp); ........现在zval 到了PHP7中, zval变成了如下结构, 要说明是, 这个是现在结构, 已经和PHPNG时候有了一些不同了, 因为我们新增加了一些解释 (联合体字段), 但是总体大小, 结构,...我们引入了一个标志位, 叫做IS_TYPE_REFCOUNTED, 它会保存在zval.u1.v.type_flags中, 我们对于需要引用计数类型就赋予这个标志, 所以上面的判断就可以变得很优雅:...//带有可能命名空间常量字符串 作用于数组有: #define IS_ARRAY_IMMUTABLE //同IS_TYPE_IMMUTABLE 作用于对象有: IS_OBJ_APPLY_COUNT

65710

【鸟哥】PHP7强悍性能背后,zval变化!

第四, 我们知道PHP中, 大量计算都是面向字符串, 然而因为引用计数是作用在zval, 那么就会导致如果要拷贝一个字符串类型zval, 我们别无他法只能复制这个字符串....MAKE_STD_ZVAL(tmp); array_init(tmp); ........现在zval 到了PHP7中, zval变成了如下结构, 要说明是, 这个是现在结构, 已经和PHPNG时候有了一些不同了, 因为我们新增加了一些解释 (联合体字段), 但是总体大小, 结构,...我们引入了一个标志位, 叫做IS_TYPE_REFCOUNTED, 它会保存在zval.u1.v.type_flags中, 我们对于需要引用计数类型就赋予这个标志, 所以上面的判断就可以变得很优雅:...//带有可能命名空间常量字符串 作用于数组有: #define IS_ARRAY_IMMUTABLE //同IS_TYPE_IMMUTABLE 作用于对象有: IS_OBJ_APPLY_COUNT

71520

PHP7内核(八):深入理解字符串实现

二、字符串二进制安全 学习过C语言应该知道,字符串中除了最后一个字符外不允许含有\0,否则会被认为是字符串结束字符,这就导致了C语言字符串有很多限制,比如不存储图片、文件等二进制数据。...> 但是PHP不是C语言写?为什么PHP不会报错?我们再来回顾一下zend_string结构体,还记得成员变量len?...+1 zend_string_delref 引用计数-1 zend_string_alloc 分配内存及初始化字符串值 zend_string_init 初始化字符串并在最后追加\0 zend_string_cop...使用引用计数方式复制字符串 zend_string_dup 直接复制一个字符串 zend_string_extend 扩容到len,保留原来值 zend_string_truncate 截断到len...如果字符串引用计数大于1或者是内部字符串时,就不能在原来基础上扩容了,先通过zend_string_alloc申请一块新内存,让后将旧内容拷贝到新内存中。

43830

Nvidia Mellanox MLX5驱动源码分析-DPU-BlueFiled3-算力加速

此外,驱动程序将使用引导和初始化页面计数; 需要引导页来允许固件完成引导命令,而另一个则完成 init hca。 命令接口版本已增加到 4,以强制使用支持固件。...当发出计数器获取请求且没有可用计数器时,池大小会增加;当批量释放最后一个计数器且可用计数器多于阈值时,池大小会减小。 所有池大小更改都是在获取/释放过程上下文中完成。...对于每个受支持和公开热二极管传感器,公开以下属性: 1) 输入温度。 2) 最高温度。...4) 温度临界最大值:指警告事件高阈值。 将公开为 `tempY_crit` hwmon 属性(RO 属性)。...使用 ptpsq 时,在 skb 上保留双引用计数,以保证在两个完成到达之前它不会被释放。 公开 ptp 附加 CQ 专用计数器并将其连接到 TX 运行状况报告器。

72421

iOS 开发:彻底理解 iOS 内存管理(ARC 篇)

2. ARC 所有权修饰符 「引用计数式内存管理」本质部分在 ARC 中并没有改变,ARC 只是自动帮我们处理了「引用计数相关部分。 为了处理对象,ARC 引入了以下四种变量所有权修饰符。...也就是说: id obj = [NSObject alloc] init]; 等同于: id __strong obj = [NSObject alloc] init]; 其对应内存管理过程如下: {...都是强指针 Person *p1 = [[Person alloc] init]; __strong Person *p2 = [[Person alloc] init]...所以 copy 多用于修饰带有可变类型不可变对象上(NSString / NSArray / NSDictionary)。这是为了避免可变类型数据赋值给不可变类型数据时,内容发生改变情况。 8....【博文】Objective-C 属性修饰符 strong 和 copy 区别 【博文】iOS strong 和 copy 区别

53610

objective-C 内存管理之-自动释放池(autorelease pool)

消息) 下面看一下基本使用,先给Sample添加一个属性int型flag(用于在销毁时看到是哪一个实例正在被销毁),同时重写dealloc()以便在释放时能输出一些信息 Sample.h #import... @interface Sample : NSObject { } -(NSString*) toString; //增加一个int型属性...(即:让池中所有对象引用计数减1) 所以,如果你在之前用代码强制retain了某对象引用计数,即使pool被release了,池中对象仍然有可能因为引用计数仍大于1,而未被销毁。...因为s2发送了retain消息,从而让其引用计数上升为2,所以最终即使pool释放后,s2仍未销毁。...4、不要把大量循环操作放到同一个NSAutoreleasePool之间,道理同上,这样会使池中有大量对象,导致程序在运行时占用较多内存。

997100
领券