为什么NSMutableArray必须用strong,而NSArray必须用copy?

NSArray与NSMutableArray应该使用copy还是strong? 先说标题的正确答案: @property (nonatomic,copy) NSArray *immutableArray; @property (nonatomic,strong) NSMutableArray *mutableArray; 其他集合: NSArray,NSDictionary,NSSet -> copy NSMutableArray,NSMutableDi... 阅读详情

1.NSMutableArray:

@property (nonatomic, copy) NSMutableArray *mArray;//等同于
- (void)setMArray:(NSMutableArray *)mArray {

_mArray = mArray.copy;

}

mArray属性就成了NSArray,NSMutableArray只能用strong修饰,不存在有copy修饰的情况,写了就成NSArray了。

如果是strong,直接是赋值_mArray = mArray;右边是什么,左边就是什么,并且是强引用新值。这样就和strong的作用一样了。

所以:用copy为关键字的话,调用setter方法后。是对赋值对象进行深拷贝。并且拷贝的对象是copy的(不可变的),而不是

mutableCopy的(可变的)。所以用copy修饰的mutableArray也被视为Array了,所以再用mutableArray的方法就会发生崩溃。

2.NSArray:

被strong修饰之后,由于只是强引用,所以副本对象数组和源对象数组只是指向同一个内存区域,这样就会造成副本对象数组会随着

源对象数组的改变而改变,即便有时候你并不想让副本对象跟着改变。



@property (nonatomic, strong) NSArray *array;
NSMutableArray *mutableArray = [NSMutableArray array];  

 [mutableArray addObject:@"1"];  
 self.array = [NSArray array];  
 self.array = mutableArray;   
 NSLog(@"array---%@", self.array);  

 [mutableArray addObject:@"2"];  
 NSLog(@"array---%@", self.array);

打印结果显示,array的长度发生了变化,具有调用mutableArray方法的能力。

结论:当修饰可变类型的属性时,如NSMutableArray、NSMutableDictionary、NSMutableString,用strong。当修饰不可变类型的属性时,如

NSArray、NSDictionary、NSString,用copy。


别再手动调参了!用BERTopic分析500篇论文摘要,我总结了这份超全参数调优指南 本文详细介绍了如何通过BERTopic参数调优从500篇论文摘要中挖掘高质量主题。从文档嵌入、降维到聚类,每个环节的关键参数设置都直接影响主题分析效果。文章提供了学术文本特有的调优技巧,包括预处理、主题多样性与专注度的平衡,以及评估指标与迭代优化方法,帮助研究者高效完成NLP主题分析任务。 阅读详情

相关推荐

《数据结构》知识点汇总+算法代码总结【全】

写在前面:本文写于吴签时期,在家备考时刷完数据结构王道书之后想着把书中重点梳理汇总一下。本文内容包括但不局限于王道数据结构每章的知识点及其课后习题所涵盖的知识点。本人曾在大三期间打过一些程序设计类比赛,所以本文所涉及到的代码不一定局限于王道书,但思想都一样。 期末复习和备考408均可使用第一章:绪论(不在考研大纲但很重要)第二章:线性表第三章:栈和队列第四章:串第五章:树与二叉树第六章:图第七章:查找 第一章:绪论(不在考研大纲但很重要) 数据结构三要素:逻辑结构、存储结构、数据的运算;其中逻辑结构包括线

qq_44622401的博客 17万+

iOS内存管理(6)--NSArray与NSMutableArray用copy修饰还是strong

一、NSMutableArray 被copy、strong修饰后的变化: 把NSMutableArray用copy修饰有时就会crash,因为对这个数组进行了增删改操作,而copy后的数组变成了不可变数组NSArray,没有响应的增删改方法,所以对其进行增删改操作就会报错。 举例如下: (1)copy: @property (nonatomic, copy  ) NS

Winzlee的专栏 2万+

本体(Ontology)概述

认识本体        本体(Ontology)的概念源自于哲学领域,在哲学中的定义为“对世界上客观事物的系统描述,即存在论”。哲学中的本体关心的是客观现实的抽象本质。而在计算机领域,本体可以在语义层次上描述知识,可以看成描述某个学科领域知识的一个通用概念模型。德国学者Studer在1998年给出了本体的相关定义“本体是共享概念模型的形式化规范说明”。这个定义包含了四层含义:即共享(share)...

baijinswpu的博客 7万+

NSMutableArray使用中忽视的问题

导语: NSMutableArray提供的API能解决绝大部分的需求,但是在实际iOS开发中,在某些场景下,需要考虑线程安全 或 弱对象引用 或 删除元素这三个问题。 一、线程安全的NSMutableArray NSMutableArray本身是线程不安全的。简单来说,线程安全就是多个线程访问同一段代码,程序不会异常、不Crash。而编写线程安全的代码主要依靠线程同步。 1、不使用atomic修饰属

学到老 1427

惊爆揭秘!异步启动永磁同步电机,调速核心技术大起底

传统的同步启动方式需要额外的同步设备,成本高且维护复杂。异步启动PMSM则巧妙地利用了鼠笼感应电机的启动原理,无需额外同步设备即可实现安全可靠的启动。其核心思想是将定子电流分解为两个正交的分量:磁链分量(id)和转矩分量(iq),分别控制这两个分量,从而实现对电机转矩的精确控制。随着电机设计技术的不断进步和控制算法的不断优化,异步启动PMSM的性能将得到进一步提升,应用范围也将更加广泛。异步启动PMSM的调速技术是其核心技术之一,直接影响着电机的性能和应用范围。

wen8789的博客 980

手把手教你用C#实现TwinCAT 3 ADS通讯(附完整代码示例)

本文详细解析了如何使用C#实现TwinCAT 3 ADS通讯,包括协议核心价值、开发环境配置、变量通信实践及高级应用场景。通过完整代码示例和性能优化技巧,帮助开发者高效实现工业自动化系统中的实时数据交换,特别适合倍福(Beckhoff)平台用户。

weixin_29230901的博客 117

使用NSArray时,到底用strong修饰还是copy修饰

iOS开发人员都知道,使用NSMutableArray时是用strong修饰,例如: @property (nonatomic,strong) NSMutableArray * mutableArray; 那么,NSArray呢?好像很多人都直接使用strong,而且网上还有很多人说除了NSString用copy,其他对象类型都用strong。 问题来了:当用strong修饰NSArray的时候,如果遇到用可变数组给它赋值怎么办?会导致不易察觉的问题

漫漫人生路 5785

WPF 解决listview值更改时页面没有刷新

WPF 解决listview值更改时页面没有刷新。

weixin_52475977的博客 1385

关于NSString、NSArray、NSDictionary作为属性的时候为什么要用copy,而非strong

关于NSString、NSArray、NSDictionary作为属性的时候为什么要用copy,而非strong

xiazhengcheng的博客 421

LPDDR4x 深度解析(3) - SDRAM核心操作机制

本文深入解析LPDDR4x SDRAM的核心操作机制,包括基础架构、刷新操作、读写流程及低功耗设计。详细介绍了存储阵列、地址解码器等关键模块,以及自刷新与自动刷新模式的区别。通过实测数据和技术细节,揭示LPDDR4x在性能优化和功耗控制方面的创新设计,为硬件工程师提供实用参考。

weixin_29278805的博客 307

Pytorch图像去噪实战(七):Noise2Noise自监督图像去噪实战,没有干净图也能训练模型

PyTorch图像去噪实战:Noise2Noise自监督去噪方法 本文介绍了在没有干净图像的情况下使用Noise2Noise方法进行图像去噪的实战方案。主要内容包括: 问题场景:真实项目中经常只有带噪图像而没有对应的干净图像,如夜间监控、医学影像等场景。 Noise2Noise核心思想:使用同一场景的两张不同噪声版本的图像进行训练(noisy_image_a → noisy_image_b),让模型学习恢复共同的干净结构而非随机噪声。 技术原理:模型通过最小化两个独立噪声图像之间的差异,最终会收敛到真实干净

ai技术增长的博客 500

NSString,NSArray,NSMutableArray分别用什么属性修饰,原因是什么?

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34356138的博客 387

【OpenClaw从入门到精通】第73篇:30天OpenClaw实战挑战——从零搭建个人数字助理(Day15-21)万字超详细高阶实战版

经过前两周的基础部署与功能搭建,你已拥有可自动化干活的AI助理与数字员工团队,但距离“高阶精通”仍有差距。本文聚焦第三周(Day15-21)核心实战,围绕安全审计、语音能力接入、Token成本控制、Agent Loop优化、One-Liner指令五大核心模块,结合真实落地案例与踩坑经验,提供超详细实操指南。通过本文,你将掌握生产级安全加固方案、语音交互全流程配置、低成本高性价比使用策略、Agent自主闭环优化技巧,以及一句话搞定复杂任务的高效指令用法,同时完成中期复盘与最后九天冲刺规划

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 360

NSString为什么用copy而不是strong,NSMutableString为什么用strong而不是用copy(或者NSArray及NSMutableArray等)

以NSString以及NSMutableString为例 @property (strong,nonatomic) NSString *sStr; @property (copy, nonatomic) NSString *cStr; - (void)test: {      NSMutableString *mStr = [NSMutableStrin

GofeyLee的博客 1424

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

知识点:可变数组的属性使用copy修饰的后果

问题 视频What's New in LLVM 中,从12:05的时间开始有个关于NSMutableArray可变数组属性的使用问题。 运行后报错图如下: 分析 self.photos的实际类型是 __NSMutable0,也就NSArray类型。没有addObject的方法。 进一步探讨 OC是门动态型语言,在编译阶段不会做类型检测。OC的内存管理是引用计数,在ARC环境下,属性@p...

weixin_34194702的博客 291

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

copy修饰NSArray strong修饰NSMutableArray

strong与copy修饰符 strong修饰的属性,对该属性赋值时发生指针拷贝,即浅拷贝; copy修饰的属性,对该属性赋值时发生内容拷贝,即深拷贝。(存在特殊Case) 通过重写对象的setter方法实现。 当将不可变对象赋值给copy修饰的不可变对象时,也是发生浅拷贝。这算是一种优化,验证见下文。 对数组而言,浅拷贝即拷贝了指向数组的指针;深拷贝即拷贝了数组中存储的内容,而这个深拷贝是通过调用copy方法实现。 copy与mutableCopy方法 以下代码发生崩溃,为什么? @prope

DABAI的博客 837

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

[Objective-C]strong、copy在NSArray和NSMutableArray的应用区别

两个问题 1. 使用strong修饰NSArray会有什么问题? 2. 使用copy修饰NSMutableArray会有什么问题? 1. 使用strong修饰NSArray的问题 // // StrongCopyTest.h // StudyRuntime // // Created by Andy Liu on 2018/5/14. // Copyright © 2018年 Andy...

混迹于移动互联网和手机行业 806

细说copy与strong

细说copy与strong一、NSArray进行copy上面的代码也可以换成属性值进行copy,如下:二、NSMutableArray进行copy这时候做修改前面数组的操作,观察结果如下:三、NSMutableArray的copy属性变成strong总结 一、NSArray进行copy NSArray *array = @[@"I ",@"am ",@“zd !”]; NSArray *arra...

逸轻紫的博客 583

NSArray应该用strong修饰还是copy修饰

我们使用NSMutableArray的时候用strong进行修饰 但是网上很多大牛建议我们使用copy来进行修饰,对于修饰NSArray, copy和strong之间到底有什么区别呢? 下面我们听过一段代码体会一下. 运行结果如下: 也就是说, 数组的内容莫名其妙的被改变了, 这可能会意外导致bug的产生 我们如果用copy修饰的话, 会产生我们所预期

zhoupengju的博客 5146

关于NSArray使用时用strong修饰还是copy修饰问题测试

大家都知道,使用NSMutableArray时是用strong修饰,例如: [objc] view plain copy @property(nonatomic,strong)NSMutableArray*mutableArray; 但是,NSArray呢?我看大多数人都直接使用strong,而且网上还有很多人说除了NSStri...

diancannei3748的博客 146

OC的深拷贝与浅拷贝--NSArray与NSMutableArray应该使用copy还是strong?

Objective-C中对象的拷贝分为深拷贝和浅拷贝。另外还有容器类对象及非容器类对象的差别: 1. 对非容器类对象(如NSString、NSMutableString类对象)使用浅拷贝:拷贝的是对象的地址,没有新的内存被分配,只是原来的那块内容多了一个指针指向。也就是说新对象跟原对象都是指向的同一个内存地址,那么内容当然一样。 2. 对非容器类对象(如NSData、NSMutableData类

学海无涯苦作舟 6395

关于 strong,copy,深拷贝,浅拷贝 的整理

I. strong,copy 先上结论: String:推荐采用 copy 或 strong 进行修饰。对于来源于不可变的字符串,两者无影响(copy需执行一次判断,会些许影响性能);对于来源于可变的字符串,需采用 copy 进行修饰 MutableArray:需采用 strong 进行修饰。若采用copy,对赋值对象进行深copy,mutableArray等同于Array,再进行mutab...

mscinsidious的博客 549

NSMutableArray 被copy、strong修饰后的变化

NSMutableArray 被copy、strong修饰后的变化

发飙的蜗牛 440

oc中copy、strong、weak、assign解析

NSMutableString “_”方式调用赋值 NSMutableString *mOriginMutableString = [[NSMutableString alloc] initWithString: @"原始数据"]; _mCopyMutableString = mOriginMutableString; _mStrongMutableString = mOri...

一品大帅的专栏 1067

--NSArray与NSMutableArray用copy修饰还是strong(转)

一、NSMutableArray 被copy、strong修饰后的变化: 把NSMutableArray用copy修饰有时就会crash,因为对这个数组进行了增删改操作,而copy后的数组变成了不可变数组NSArray,没有响应的增删改方法,所以对其进行增删改操作就会报错。 举例如下: (1)copy: @property(nonatomic,copy )NSMutab...

weixin_30892763的博客 187

NSString NSMutableString NSArray NSMutableArray Block 分别用哪些修饰?

NSString NSMutableString NSArray NSMutableArray Block 分别用哪些修饰?

lin_transform的博客 1630
上一篇: NSString属性什么时候用copy,什么时候用strong?
下一篇: iOS数据存储类型 及 堆(heap)和栈(stack)
lin_transform
博客等级 码龄9年 3粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值