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

iphone xcode; mutableCopy仍然是不可变的?

iPhone Xcode是苹果公司提供的一套集成开发环境(IDE),用于开发iOS和macOS应用程序。它包含了一系列工具和框架,可以帮助开发者创建、测试和部署应用程序。

mutableCopy是Objective-C中的一个方法,用于创建一个可变的副本对象。当我们调用一个对象的mutableCopy方法时,会生成该对象的一个可变拷贝。这意味着我们可以对这个副本对象进行修改操作,而不会影响到原始对象。

然而,需要注意的是,mutableCopy方法只会对可变对象有效。如果原始对象是一个不可变对象,那么调用mutableCopy方法后得到的副本对象仍然是不可变的。这是因为不可变对象的mutableCopy方法会返回一个不可变的副本对象。

对于mutableCopy方法的应用场景,一般用于需要对原始对象进行修改操作的情况。通过创建一个可变副本对象,我们可以在不改变原始对象的情况下,对副本对象进行任意修改。这在一些需要保留原始数据的情况下非常有用。

腾讯云提供了一系列与移动开发相关的产品和服务,包括移动应用开发平台、移动推送服务、移动测试服务等。您可以通过访问腾讯云官网的移动开发相关页面,了解更多关于这些产品的详细信息和使用方法。

移动应用开发平台:https://cloud.tencent.com/product/mpaas

移动推送服务:https://cloud.tencent.com/product/tpns

移动测试服务:https://cloud.tencent.com/product/mts

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

相关·内容

接口与API设计--22:NSCopying协议

copy概念特点 copy产生一个新副本过程,利用一个原对象产生一个新对象 copy:创建一个不可变副本(NSString;NSArray;NSDictionary;) mutableCopy...:创建一个可变副本 (NSMutableDictionary; NSMutableArray;NSMutableString) 修改新文件,不会影响原文件 修改原文件,不会影响新文件 浅拷贝:如果没有生成新对象我们称为浅拷贝...拷贝出来对象中内容和以前内容一致 2、不可变字符串通过copy操作,没有生成新对象,而是指向同一内存 3、不可变字符串通过mutableCopy操作,生成新可变对象,所以需要生成一个新对象...拷贝出来对象中内容和以前内容一致 2、可变字符串通过copy操作,生成新对象 3、可变字符串通过mutableCopy操作,生成新可变对象 自定义类实现copy(NSCopying协议)...--999 0x6000000371c0--iPhone--999 注:在- (id)copyWithZone:(NSZone *)zone方法中,一定要通过[self class]方法返回对象调用allocWithZone

16410

iOS中Copy

copy概念特点 copy产生一个新副本过程,利用一个原对象产生一个新对象 copy:创建一个不可变副本(NSString\NSArray\NSDictionary) mutableCopy...:创建一个可变副本 (NSMutableDictionary\NSMutableArray\NSMutableString) 修改新文件或原文件,不会影响原文件或新文件 浅拷贝:如果没有生成新对象我们称为浅拷贝...拷贝出来对象中内容和以前内容一致 2、不可变字符串通过copy操作,没有生成新对象,而是指向同一内存 3、不可变字符串通过mutableCopy操作,生成新可变对象,所以需要生成一个新对象...拷贝出来对象中内容和以前内容一致 2、可变字符串通过copy操作,生成新对象 3、可变字符串通过mutableCopy操作,生成新可变对象 copy用途 property中使用copy...--999 0x6000000371c0--iPhone--999 注:在- (id)copyWithZone:(NSZone *)zone方法中,一定要通过[self class]方法返回对象调用allocWithZone

13510
  • iOS 进阶之深拷贝和浅拷贝

    3. copy 和 mutablecopy copy:copy拷贝出来对象类型总是不可变类型(例如, NSString, NSDictionary, NSArray等等) mutableCopy拷贝出来对象类型总是可变类型...集合类对象copy与mutableCopy 5.1 对不可变集合类: 不可变集合类对象是指NSArray、NSDictionary、NSSet ... 之类对象。...强调:此处内容拷贝,仅仅是拷贝array这个对象,array集合内部元素仍然是指针拷贝。...这个类是 NSString 子类,表示一种可修改其值字符串,此时若是拷贝字符串,那么设置完属性之后,字符串值就可能会在对象不知情情况下遭人更改。...不管是可变对象和不可变对象进行copy操作,产生都是不可变对象,进行mutablecopy操作产生都是可变对象。 对任何一个对象进行深拷贝,都是单层深拷贝。

    1.4K20

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

    或者,你也可以使用Xcodemodern Objective-C转换器来自动转换你代码。参考Refactoring Your Code Using Xcode。...@synthesize表示为这两个属性自动生成名为_name和_age底层实例变量,并自动生成相关getter和setter也可以写编译器默认会自动生成'_属性名'实例变量以及相关getter...,因为OC没有提供mutableCopy修饰符,对于可变对象使用strong修饰符即可。...Foundation框架中很多数据类型已经帮我们实现了上述两个方法,因此我们可以使用copy方法和mutableCopy方法来复制一个对象,两者区别在于copy返回值仍未不可变对象,mutableCopy...使用mutableCopy时由于返回可变对象因此需要一份拷贝,供其他对象使用。对于可变类型,不管是copy还是mutableCopy均会进行深拷贝,所指向指针不同。

    1.7K90

    iOS 复制知识点总结

    说明copy操作进行了指针拷贝,mutableCopy进行了内容拷贝。但需要强调是:此处内容拷贝,仅仅是拷贝array这个对象,array集合内部元素仍然是指针拷贝。...对于自定义对象,在我看来并没有什么可变可变概念,因此实现mutableCopy其实是没有什么意义,在此就不详细介绍了。...,虽然程序传入NSMutableString,但程序调用该参数copy方法得到是不可变副本。...因此,程序赋给Person对象name实例变量值依然是不可变字符串。 注意:定义合成getter、setter方法时并没有提供mutableCopy指示符。...因此即使定义实例变量时使用了可变类型,但只要使用copy指示符,实例变量实际得到值总是不可变对象。

    682110

    Objective-C Copy

    如果一个类具有可变和不可变变体:那么可变类应该采用NSMutableCopying协议(而不是NSCopying)并实现mutableCopyWithZone:方法来确保拷贝对象保持可变。...通过发送一个copy或mutableCopy消息来拷贝一个对象。这些消息导致调用适当NSCopying或NSMutableCopying方法。...[mutableObject mutableCopy] //深复制 从示例中可以看到,NSString作为不可变对象,copy为浅复制,只是拷贝了一份引用,地址不变,mutableCopy则是深复制...但是:集合对象内容复制仅限于对象本身,对象元素仍然是指针复制(浅复制)。...copy] //单层深复制 [mutableObject mutableCopy] //单层深复制 真*深拷贝 如果你需要一个真正深拷贝:集合里对象也要进行深拷贝,那么要NSKeyedArchiver

    47320

    Objective-C中深拷贝和浅拷贝

    在Objective-C中对象之间拷贝分为浅拷贝和深拷贝。说白了,对非容器类浅拷贝就是拷贝对象地址,对象里面存内容仍然是一份,没有新内存被分配。...下面把容器非容器,可变可变结合着retain,copy,mutableCopy来仔细分析一下OC中得深浅拷贝,代码走起:  1.非容器 + 不可变对象 + retain + copy + mutableCopy...                代码说明:先定义一个非容器类不可变对象,然后同过retain,copy和mutableCopy方式把值copy给一个非容器类不可变对象,最后把各个对象地址输出,用NSString...+ copy + mutableCopy 下面对容器类可变对象进行测试,有程序运行结果可知当使用mutableCopy时确实返回了一个新容器(由内存地址可以看出),但从容器对象看而言是容器深拷贝...+ retain + copy + mutableCopy 下面对容器类可变对象进行测试,copy和mutableCopy对于容器本身是深拷贝,原因是返回了一个新容器地址,但对于容器中元素仍然是浅拷贝

    1.1K90

    @property 关键字区别 - copy & mutableCopy

    ---- 探索步骤如下: 第一步:创建一个可变数组,并给他赋值 为可变数组赋值 这里有人会说了,你可变数组怎么这么赋值,你这里就出错了!...在第一步赋值时候,其实我们mutableArray - - myArrayM已经变成不可变了!...所以这里本质是给一个不可变数组(NSArray 添加对象)肯定报错 ---- 第三步:改第二步,使用mutableCopy实现 NSArray ->转 NSMutableArray 没有添加成功 关键问题来了...如图,没有报错,已经可以顺利执行addObject方法了,但是此时才是最可怕,有执行,却没有加进去! ---- 第四步:将可变数组_myArrayM当成不可变来用!...惊奇发现:这样才能set成功 ---- 第5步:全程不给mutableArray赋值,只做add 操作 可变数组全程做add操作,赋值 结果如下: 成功了!

    87070

    iOS内存管理(三)-深拷贝和浅拷贝

    等等)mutableCopy拷贝出来对象类型总是可变类型(例如, NSMutableString, NSMutableDictionary, NSMutableArray等等)对象要想具有copy和mutablecopy...,緣由是NSMutableString對象copy操做 產生新地址,產生是不可變對象,因此改變string,,會改變被copy修飾屬性.正好符合咱們改變string 會改變self.copyedstring...(不可变对象和不可变集合对象),进行copy都是指针拷贝,进行mutablecopy都是内容拷贝。...对于可变对象(可变对象和可变集合对象),进行copy和mutablecopy都是内容copy。...不管是可变对象和不可变对象进行copy操作,产生都是不可变对象,进行mutablecopy操作产生都是可变对象。对任何一个对象进行深拷贝,都是单层深拷贝。

    38910

    【已解决】Xcode9 打包出来 UITableView 高度代理走 但是 Xcode8打包就可以

    问题描述 我们首页有点复杂,因为结构是下面是一个横向滚动 UIScrollView 上面是一个 UITableView 但是整体看起来是连贯 所以上面的 UITableView 高度就要算出来。...但是在 Xcode9运行时候发现 CELL 高度代理竟然走了,导致我计算高度方法没有被执行,结果计算出高度为0....但是线上包在iOS11上面显示十分正常,并且团队其他小伙伴运行没出现问题,就我 Xcode9运行出现问题。 那就是 Xcode9打包出来出现了问题。...设置这两个属性之后,首页上面 UITableView 数据果然出现了。 虽然解决了,但是首页因为多个 UIScrollView 导致十分滚动会卡顿。...首页设计思路可以参考我一篇文章 关于首页设计框架和一些细节处理分析

    56520

    iOS中各种理论知识

    你如何理解OC 内存管理 OC 内存管理是基于引用计数。...谁想使用某个对象B,就要把对象B 计数器+1,如果 使用这个对象了,那么就把对象B 计数器-1,如果B 对象计数器减到0,那么B 对象自动会调用自己 dealloc函数,也就是这个对象被销毁。...assign, retain, copy, autorelease, release, dealloc 不同 assign 就是基本赋值,就是C 基本赋值retain 就是让对象引用计数+1...self.name 表示调用setter 调用一个函数 name=”year”表示给字段field 赋值 什么是深拷贝和浅拷贝copy 浅拷贝只是拷贝对象本身,递归拷贝里面的子对象深拷贝是把对象以及对象对象递归拷贝...;  copy 和mutableCopy 是什么 mutableCopy 可变拷贝NSString --àmutableCopy-àNSMutableString NSArray --àmutableCopy

    36210

    iOS中浅复制与深复制

    所以在非集合对象中又可以分为可变对象和不可变对象。...对他们进行copy与mutableCopy含义是: 对于不可变非集合对象(如NSString),copy操作是浅复制,只会复制指针,mutableCopy操作是深复制, 对于可变非集合对象(如NSMutableString...),copy和mutableCopy都是深复制,都会创建一个新同样内容来返回,但是要注意,copy返回是不可变对象,也就是说即使你对一个NSMutableString做copy操作,返回给另一个NSMutableString...先说说简单浅复制与深复制,其实与非集合对象差不多: 对于不可变集合对象(如NSArray),copy操作是浅复制,只会复制指针,mutableCopy操作是深复制, 对于可变集合对象(如NSMutableArray...),copy和mutableCopy都是深复制,都会创建一个新同样内容来返回,但是要注意两点,一是copy返回还是不可变对象,二就是上面说,这个深复制只是单层深复制,里面包含元素还是指针浅复制

    52220

    NSCopying和NSCoding对象序列化反序列化基础详解你要知道NSCopying、NSCoding协议及对象序列化和反序列化都在这里

    NSCopying协议 Foundation框架中为我们提供基础类基本都实现了NSCopying协议,因此,我们可以使用copy方法用来获取对象一个不可变副本对象,可以使用mutableCopy方法用来获取对象一个可变副本对象...,接下来使用copy和mutableCopy方法分别获取不可变副本对象和可变副本对象,最后输出三者地址,可以发现原对象和不可变副本对象地址一致,而可变对象地址发生了变化。...之所以这样做是为了和第三组实验进行对比,同样来获取可变和不可变副本对象,并输出地址,发现只有mutableCopy方法地址不同。...通过对比上面四组实验mutableCopy复制可变副本对象结果来看,我们可以发现,不论原对象是否可变,复制可变副本对象都会获取一个全新对象,因为地址与原对象不同,因此即时修改也互不影响。...使用mutableCopy时由于返回可变对象因此需要一份拷贝,供其他对象使用。对于可变类型,不管是copy还是mutableCopy均会进行单层深拷贝,所指向指针不同。

    1.4K90

    iOS之属性修饰符 retain、strong和copy区别测试

    copy方法赋值给其他可变或不可变字符串,都是指针拷贝;      2)、不可变字符串使用mutableCopy方法赋值给可变或不可变字符串,和可变字符串使用copy方法或者mutableCopy方法赋值给其他可变或不可变字符串...copy给strong, copy修饰属性赋值,都是指针拷贝;          2)、不可变字符串调用mutableCopy, 和可变字符串调用copy,和可变字符串调用mutableCopy方法给...方法copy也不一定代表着浅拷贝,碰上数据源为不可变数据则是浅拷贝,碰上数据源是可变数据则是深拷贝; NSObject方法mutableCopy不管数据源是不可变还是可变,都是深拷贝; 这以上几个结论适用字符串...copy赋值给可变数组或不可变数组都是指针拷贝;不可变数组调用mutableCopy赋值给可变数组或不可变数组都是内容拷贝          2)、可变数组调用copy或mutableCopy赋值给可变数组或不可变数组...copy给strong、copy修饰数组属性赋值,都是指针拷贝;      2)、 不可变数组调用mutableCopy, 和可变数组调用copy, 和可变数组调用mutableCopy方法给strong

    2.4K40

    实际开发中深浅拷贝问题 - 解答

    mutableCopy = 深拷贝?...目标string 类型是 NSMutableString string2 和 string4 做都是mutableCopy, 类型一样,但是地址变了,说明mutableCopy ==> 产生一个新对象...,基本可以得出以下结论 目标对象如果是不可变(NSString/NSArray...)...,用copy,是浅拷贝,不会生成新对象 目标对象如果是不可变,用mutableCopy,对改变其类型,类型改变,会生成新对象 目标对象如果是可变,用copy,等于改变其类型,会生成新对象 目标对象如果是可变...&& mutableCopy实现各种深拷贝说法很多都是错,并不是 当前对象内存地址不一样就是深拷贝 如果数组是单层模型数组 - [model,model],使用[[NSArray alloc]

    70840

    【腾讯云代码分析】经典案例分享:返回值内存泄露

    通过应用规则,开发人员可以在编码阶段就发现潜在内存泄漏问题,并及时修复,以提高代码质量和性能。...LeakOfReturn属于编译型工具规则,需要在安装有Xcode、且具备项目编译环境Mac机器上执行代码分析,并且在分析方案中配置项目的xcodebuild编译命令。...经典案例 ▼ 问题描述 在方法中进行内存分配并返回该对象时,未遵循Cocoa内存管理命名规范(即函数名需要以 copy,mutableCopy,alloc,new开头),那么返回对象可能会导致内存泄漏...根据Cocoa内存管理规则,如果一个方法名称不是以copy、mutableCopy、alloc或new开头,那么它应该返回一个自动释放对象。...解决方案 为了修复这个问题,我们可以将createString方法名称更改为以copy、mutableCopy、alloc或new开头,或者在方法内部使用autorelease来确保返回对象在适当时候被释放

    8210

    【IOS】IOS开发问题解决方法索引(一)

    2 Xcode调试时查看变量几种方法 Xcode如何查看内存中数据 http://blog.csdn.net/evgd2288/article/details/8995779 Xcode...Debug中查看数据细节方法 http://www.devdiv.com/xcode_debug_-blog-211903-13186.html 3 Xcode免证书(iDP)开发+真机调试.../ 破解Xcode实现无证书真机调试(支持Xcode4.6) http://blog.csdn.net/it_magician/article/details/8663884 iPhone 真机调试应用程序...确保有多少alloc,copy,mutableCopy或retain消息就有多少release或autorelease消息发送给该对象. 换句话说,确保你代码平衡 5....应用程序都有一个UIApplication,UIApplication是iPhone应用程序开始并且负责初始化并显示 UIWindow,并负责加载应用程序第一个UIView到UIWindow窗体中。

    87840

    浅入深出Copy和mutableCopy

    拷贝目的 拷贝出一个和原对象相同副本,互不影响 举个例子 NSString *a = [NSString stringWithFormat:@"abcabcabc"]; NSString...abcabcabc,abcabcabc 0xf9f7789ebc9c00cc,0xf9f7789ebc9c00cc,0x6000011f7090 疑问 为什么a 和b 地址一样 我们思考一下,由于a 为不可变字符串...所以只需要拷贝一个新指针去指向a指向地址就可以了。而c是a mutableCopy得来。因为变成NSMutableString 而且不影响之前对象,所以要拷贝出一个新内存空间。...如果不引用计数+1,会造成[a release]时候 a对应空间引用计数为0,造成释放。...而此时b 还在引用释放内存空间,就会产生坏内存访问崩溃现象 其他拷贝对象同理 不可变copy 为浅拷贝 注意 Tagged Pointer对象比较特殊。不用管理引用计数。

    53020
    领券