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

iOS 复制知识点总结

; [stringMCopy appendString:@"!!"]; crash的原因就是copy返回的对象是immutable对象。...2、自定义对象的复制 使用copy和mutableCopy复制对象的副本使用起来确实方便,那么我们自定义的类是否可调用copy与mutableCopy方法来复制副本呢?...对于自定义的对象,在我看来并没有什么可变可变的概念,因此实现mutableCopy其实是没有什么意义的,在此就不详细介绍了。...:' 这段错误提示不允许修改person的name属性,这是因为程序定义name属性时使用了copy指示符,该指示符置顶调用setName:方法时(通过点语法赋值时,实际上是调用对应的setter方法)...因此即使定义实例变量时使用可变类型,但只要使用copy指示符,实例变量实际得到的值总是不可变对象

670110
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    OC知识--Foundation框架详尽总结之『字符串类』

    一个NSString对象就代表一个字符串(文字内容) 一般称NSString为字符串类 2....使用NSURL读写字符串 从URL中读取 // 用来保存错误信息 NSError *error = nil; // 创建URL路径 NSURL *url = [NSURL fileURLWithPath...字符串中的可变和不可变可变:指的是字符串在内存中占用的存储空间固定,并且存储的内容不能发生变化 // 改变了指针的指向, 并没有修改字符串 NSString *str = @"abc"; //...3.png 可变:指的是字符串在内存中占用的存储空间可以固定,并且存储的内容可以被修改 NSMutableString *str = [NSMutableString string]; NSLog(@...字符串使用注意事项 @"abc"这种方式创建的字符串始终是NSString,不是NSMutalbeString。所以下面的代码创建的还是NSString,此时使用可变字符串的函数,无法操作字符串。

    62420

    为什么NSString要用Copy来修饰?

    :@"hah"]; // 此时名字这个属性被修改了 NSLog(@"%@", xiaoMing.name); 如果用Copy来修饰name这个属性不会改变,如果使用Strong,当name这个字符串改变的时候...xiaoMing.name = name;(此时name是用copy修饰的)    等同于  xiaoMing.name = [name copy];(copy对可变对象进行的是深拷贝,此时是拷贝出了一个新的对象然后赋值给了...xiaoMing.name   mutableCopy对所有的对象进行的都是深拷贝) 补充:这其实也是看需求,看被赋值的字符串是否需要随着赋值字符串的变化而变化,而大多数情况下我们希望被赋值的字符串如某个对象的某个字符串类型的属性会随着赋值字符串的变化而变化...反之,如果我们希望被赋值的字符串随着赋值字符串的变化而变化,那么我们也可以使用strong来修饰字符串(赋值字符串和被赋值字符串说的好像挺绕口啊)。注:赋值字符串既然可变,那它就必然是可变字符串。...当我们确定赋值字符串是不可变字符串的时候我们是可以使用strong来修饰字符串。

    61420

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

    assign、weak、unsafe_unretained assign表示对属性只进行简单的赋值操作,更改所赋的新值的引用计数,也不改变旧值的引用计数,常用于标量类型,如NSInteger,NSUInteger...assign也可以修饰对象如NSString等类型对象,上面说过使用assign修饰不会更改所赋的新值的引用计数,也不改变旧值的引用计数,如果当所赋的新值引用计数为0对象被销毁时属性并不知道,编译器不会将该属性置为...为确保这些不可变对象因为可变子类对象影响,需要copy一份备份,如果不使用copy修饰,使用strong或assign等修饰则会因为多态导致属性值被修改。...,因为Foundation框架提供的这些类都实现了NSCopying协议,使用copy方法返回的都是不可变对象,如果使用copy修饰符在对可变对象赋值时则会获取一个不可变对象,接下来如果对这个对象进行可变对象的操作则会产生异常...所以,针对不可变对象使用copy修饰,针对可变对象使用strong修饰。

    1.7K90

    assign,retain,copy,strong

    方法时 readonly是只读特性 只会生成getter方法 不会生成setter方法 ;希望属性在类外改变 assign是赋值特性,setter方法将传入参数赋值给实例变量;仅设置变量时; retain...strong:强引用,arc中使用,与mrc中retain类似,使用之后,引用计数+1;实例变量对传入的对象有所有权,即强引用。...strong根retain的意思相同并产生相同的代码,语意上更能体现对象的关系; weak:弱引用,arc中使用,如果传入的对象被释放了,其指向nil,可以有效的避免野指针,其引用计数为1; 说到底,strong...使用 copy 可以防止不可变的属性被赋值的是可变的数据时,因为可变数据的改变改变属性的值。...:@"hello"]; Test *test = [[Test alloc]init]; test.str1 = str; test.str2 = str; [str appendString

    61750

    OC学习12——字符串、日期、日历

    一、字符串 1、NSString代表字符序列不可变的字符串,即一旦NSString对象被创建,包含在这个对象中的字符序列就说不可改变的,直至这个对象被销毁。...对象 调用NSDateComponents的getter方法获取个时间字段的数值   使用个时间字段的数值来初始化NSDate对象的步骤如下: 创建NSCalendar对象 创建一个NSDateComponents...mutableCopy方法用于复制对象可变副本,通常来说,mutableCopy方法返回的副本对象总是可修改的(MutableString等),即使该原始对象是不可修改。...[strCopy appendString:@".org"]; 23 NSLog(@"%@" , strCopy); 24 // 调用book(可变字符串)的copy方法...27 [bookCopy2 appendString:@"aa"]; 28 } 29 }  2、当程序调用对象的copy或mutableCopy方法时,实际上程序底层需要调用

    1.9K70

    iOS中的Copy

    copy的概念特点 copy产生一个新副本的过程,利用一个原对象产生一个新对象 copy:创建一个不可变的副本(NSString\NSArray\NSDictionary) mutableCopy...:创建一个可变的副本 (NSMutableDictionary\NSMutableArray\NSMutableString) 修改新文件或原文件,不会影响原文件或新文件 浅拷贝:如果没有生成新对象我们称为浅拷贝...2、不可变的字符串通过copy操作,没有生成新的对象,而是指向同一内存 3、不可变的字符串通过mutableCopy操作,生成新的可变对象,所以需要生成一个新对象 NSMutableString *str...2、可变的字符串通过copy操作,生成新的对象 3、可变的字符串通过mutableCopy操作,生成新的可变对象 copy的用途 property中使用的copy、strong修饰的区别 strong...]initWithFormat:@"lastNameStr-BB"]; p.lastName = lastNameStr; NSLog(@"%@",p.lastName); [lastNameStr appendString

    12710

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

    self.copyedString); NSLog(@"%@",self.copyedString); // 改變字符串,對比用strong和copy修飾的屬性的區別 [string appendString...copy修飾的屬性.正好符合咱們改變string 會改變self.copyedstring的值,而self.strongstring的值已經改變了iOS block 为啥官方文档建议用 copy 修饰...(不可变对象和不可变集合对象),进行copy都是指针拷贝,进行mutablecopy都是内容拷贝。...对于可变对象可变对象可变集合对象),进行copy和mutablecopy都是内容copy。...不管是可变对象和不可变对象进行copy操作,产生的都是不可变对象,进行mutablecopy操作产生的都是可变对象。对任何一个对象进行深拷贝,都是单层深拷贝。

    37010

    京东七鲜一面总结

    NSMutableString 是一个可以改变对象,如果我们用 strong 修饰,NSString 对象强引用了 NSMutableString 对象。...假如我们在其他的地方修改了这个 NSMutableString 对象,那么 NSString 的值会随之改变。...关于copy修饰相关 1、对 NSString 进行 copy -> 这是一个浅拷贝,但是因为是不可变对象,后期值也不会改变; 2、对 NSString 进行 mutableCopy -> 这是一个深拷贝...进行 mutableCopy -> 这是一个深拷贝,拷贝出来一个可变对象; 总结: 对对象进行 mutableCopy,不管对象可变的还是不可变的都是深拷贝,并且拷贝出来的对象都是可变的; 对对象进行...是指针复制,而 mArrayCopy1 是对象复制,mArrayCopy1 还可以改变期内的元素:删除或添加。

    39020

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

    :retain、strong、copy三者的作用是一样的,即当引用的原对象改变后,其他引用该对象的属性值不会受影响,还是保持原来的值; 2、对于可变对象来说:retain、strong和copy的作用就有区别了...,使用retain、strong修饰的属性,当引用的原对象改变后,其他引用该对象的属性值会一起跟着变化,而copy修饰的属性的值还是保持原样。...copy的作用主要也是体现在这里: 让属性值不会随着原引用对象的值改变改变; 3、retain和strong的区别:作用是一样的,只是写法上的区别。...所以,我们如果从效果来看的话,想要源字符串值的改变不引起属性字符串值的改变,只有当源字符串是可变字符串时,属性才需要用copy修饰,其他情况使用strong、retain修饰效果是一样的,虽然是指针拷贝...copy方法赋值给其他可变或不可变字符串,都是指针拷贝;      2)、不可变字符串使用mutableCopy方法赋值给可变或不可变字符串,和可变字符串使用copy方法或者mutableCopy方法赋值给其他可变或不可变字符串

    2.4K40

    iOS中的浅复制与深复制

    像NSString这种对象,还有一个相关的叫NSMutableString。所以在非集合对象中又可以分为可变对象和不可变对象。...对他们进行copy与mutableCopy的含义是: 对于不可变非集合对象(如NSString),copy操作是浅复制,只会复制指针,mutableCopy操作是深复制, 对于可变非集合对象(如NSMutableString...mStringCopy = [string copy];// 深复制 NSMutableString *stringMCopy = [string mutableCopy];// 深复制 [mStringCopy appendString...先说说简单的浅复制与深复制,其实与非集合对象差不多: 对于不可变集合对象(如NSArray),copy操作是浅复制,只会复制指针,mutableCopy操作是深复制, 对于可变集合对象(如NSMutableArray...shallowCopyDict = [[NSDictionary alloc] initWithDictionary:someDictionary copyItems:YES]; copyItems设为YES会对集合中的每一个对象尝试做深复制

    51420

    python——元组

    列表适合于在程序运行的时候,数据会发生改变的场合。但是有时候,我们希望有些值被更改,希望它们在整个程序运行周期都不能被改变,Python将不能修改的值称为不可变的,而不可变的列表被称为元组。...元组是不可变对象,之前的字符串也是不可变对象。...my_tuple对象是元组类型。我们通常在定义元组的时候会使用圆括号()将元组给包括起来。但是圆括号并不是元组的标识。下面的例子展示了更多的关于元组的细节。...下面来尝试改变元组中元素的值,看看python解释器会报出什么样的错误信息。...my_tuple = 1,2,3,4,5 my_tuple[0] = 0 # 错误,不能修改不可变对象 尝试执行程序,可以看到错误提示如下: ?

    74710

    KVO详解及底层实现

    KVO就是NSKeyValueObserving,请看官方文档的解释: 大概翻译如下: 一种非正式协议,通知其他对象的指定属性发生了改变。 简单理解就是,可以监听一个对象的某个属性是否发生改变。...你可以使用@required或者optional关键字指定方法是否必须实现。子类继承父类采用的协议。...,系统为我们动态添加了一个NSKVONotifying_+类名的类,因为我们改变对象属性的值是通过setter方法实现了,所以很明显是系统动态生成的NSKVONotifying_ZJPerson类重写了...dealloc:应该是处理对象销毁之前的一些收尾工作 _isKVOA:告诉系统使用了kvo 拓展 学任何东西,通过我们的思考一定会问出一些别的问题,通过深入了解kvo,下面两个问题,是面试经常会被问到的...:@"\n"]; [ivarStrs appendString:ivarName]; [ivarStrs appendString:@"-"]; [ivarStrs

    2.3K20

    Objective C (iOS) for Qt C++ Developers(iOS开发,Qt开发人员需要了解什么?)

    在Objective C,这是通常被称为发送消息,不过它的调用方法,还有好多我发现更加混乱. 在上面这种方法演示样例,methodName是所谓的选择器。一个选择器是一个方法的标识符。...有一个可变的字符串,必须使用NSMutableString配合其appendString,appendFormat等功能。尤其是appendFormat真的非常实用。...您须要使用他们可变泛型改变他们(比如NSMutableArray)。 假设你想存储原始类型,您须要使用NSNumber、NSValue等包装。...我曾经尝试套接字编程iQuassel项目有几个原因,主要由于你必须使用Carbon取代Cocoa。...假设你想获得位图的上下文,尝试UIGraphicsGetImageFromCurrentImageContext。

    93410

    const关键字到底该什么用

    修饰普通变量 例如: const int NUM = 10; //与int const NUM等价 NUM = 9; //编译错误,不可再次修改 由于使用了const修饰NUM,使得NUM为只读,因此尝试对.../编译错误,指向的对象是只读的,不可通过p进行改变 p = &b; //合法,改变了p的指向 这里为了便于理解,可认为const修饰的是*p,通常使用*对指针进行解引用来访问对象,因而,该对象是只读的..., p = &b; //编译错误,p是一个const指针,只读,不可变 3.指针不可改变指向,指向的内容也不可变 int a = 9; int b = 10; const int * const...p = &a;//p既是一个const指针,同时也指向了int类型的const值 *p = 11; //编译错误,指向的对象是只读的,不可通过p进行改变 p = &b; //编译错误,p...我们使用一句话总结: const放在*的左侧任意位置,限定了该指针指向的对象是只读的;const放在*的右侧,限定了指针本身是只读的,即不可变的。

    57820

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    热门标签

    领券