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

NSString immutable允许更改其值?

在Objective-C中,NSString 类是不可变的,这意味着一旦创建了一个 NSString 对象,就不能更改其值。如果需要更改字符串的值,可以创建一个可变字符串,如 NSMutableString

例如,以下代码将创建一个可变字符串,并更改其值:

代码语言:objective-c
复制
NSMutableString *mutableString = [NSMutableString stringWithString:@"Hello"];
[mutableString appendString:@" World"];

在这个例子中,我们创建了一个 NSMutableString 对象,并将其初始化为 "Hello"。然后,我们使用 appendString: 方法将 " World" 添加到字符串的末尾。这样,字符串的值就变成了 "Hello World"。

如果你需要在不使用可变字符串的情况下更改字符串的值,可以使用字符串拼接。例如:

代码语言:objective-c
复制
NSString *originalString = @"Hello";
NSString *newString = [originalString stringByAppendingString:@" World"];

在这个例子中,我们创建了一个新的 NSString 对象,其值为 "Hello World"。我们使用 stringByAppendingString: 方法将 " World" 添加到原始字符串的末尾。请注意,这种方法不会更改原始字符串的值,而是创建一个新的字符串。

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

相关·内容

iOS 进阶之深拷贝和浅拷贝

前言 在开发的时候,使用copy的频率还是挺高的,我们只要copy定义的属性的设置方法并不保留新,只是拷贝一份,为什么NSString、NSArray、NSDictionary属性的定义说那个copy...下面先看个非集合类immutable对象拷贝的例子 NSString *string = @"origin"; NSString *stringCopy = [string copy]; NSMutableString...当属性类型为 NSString 时,经常用此特质来保护封装性,因为传递给设置方法的新有可能指向一个 NSMutableString 类的实例。...这个类是 NSString 的子类,表示一种可修改的字符串,此时若是不拷贝字符串,那么设置完属性之后,字符串的就可能会在对象不知情的情况下遭人更改。...所以,这时就要拷贝一份“不可变” (immutable)的字符串,确保对象中的字符串不会无意间变动。只要实现属性所用的对象是“可变的” (mutable),就应该在设置新属性时拷贝一份。

1.4K20
  • iOS理论基础(一)

    为这种属性设置新时,设置方法既不保留新,也不释放旧。此特质同assign类似, 然而在属性所指的对象遭到摧毁时,属性也会清空(nil out)。...当属性类型为 NSString 时,经常用此特质来保护封装性,因为传递给设置方法的新有可能指向一个 NSMutableString 类的实例。...这个类是 NSString 的子类,表示一种可修改的字符串,此时若是不拷贝字符串,那么设置完属性之后,字符串的就可能会在对象不知情的情况下遭人更改。...所以,这时就要拷贝一份“不可变” (immutable)的字符串,确保对象中的字符串不会无意间变动。只要实现属性所用的对象是“可变的” (mutable),就应该在设置新属性时拷贝一份。...-(void)setName:(NSString*)name{ _name=[name copy]; }

    25020

    ARC内存管理中容易忽略的问题

    Pointer来存储,对于字符串来说所需内存小于60位的,它可以创建一个Tagged Pointer,所以NSTaggedPointerString是一个伪装的对象,里面存储的不是指针地址而是字符串,...(2)__NSCFConstantString 字符串常量,是一种编译时常量,它的 retainCount 很大,在控制台打印出的数值则是 18446744073709551615==2^64-1,测试证明...,即便对进行 release 操作,retainCount 也不会产生任何变化。...二、拷贝(copy) 2.1、immutable对象的copy 向immutable对象发送copy消息一定会得到一个新对象吗?...下面的测试demo中向不可变的NSString、NSArray、NSDictionary以及NSSet对象发送copy消息,得到了immutable的新对象,但是问题是:copy是深拷贝还是浅拷贝了?

    97520

    iOS开发·RunLoop源码与用法完全解析(输入源,定时源,观察者,线程间通信,端口间通信,NSPort,NSMessagePort,NSMachPort,NSPortMessage)

    */ CFIndex _order; /* immutable */ CFRunLoopObserverCallBack _callout; /* immutable...苹果不允许直接创建 RunLoop,它只提供了两个自动获取的函数:CFRunLoopGetMain() 和 CFRunLoopGetCurrent()。...这两个方法实际调用的是同一个方法CFRunLoopRunSpecific,返回是一个SInt32类型的,根据返回,来决定runLoop的运行状况。 4....包含一个时间长度和一个回调(函数指针)。当加入到 RunLoop 时,RunLoop会注册对应的时间点,当时间点到时,RunLoop会被唤醒以执行那个回调。...selector也是特殊的基于自定义的源.理论上来说,允许在当前线程向任何线程上执行发送消息,和基于端口的源一样,执行selector请求会在目标线程上序列化,减缓许多在线程上允许多个方法容易引起的同步问题

    2.3K20

    Objective-C Copy

    If a class has mutable and immutable variants, the mutable class should adopt the NSMutableCopying protocol...浅拷贝和深拷贝方法都直接copy属性,但不同之处在于它们如何处理指针引用,特别是对对象的引用(例如NSString * str)。深拷贝复制所引用的对象,而浅拷贝仅复制对这些对象的引用。...深拷贝对象比浅拷贝更受欢迎,尤其是对于对象。...三、对象的深拷贝,浅拷贝 在对象对象(NSString, NSNumber,NSData, NSDate,NSvalue)中:对immutable对象进行copy操作,是指针复制(浅复制),mutableCopy...在集合类对象(NSArray、NSDictionary、NSSet)中,对immutable对象进行copy,是指针复制,mutableCopy是内容复制;对mutable对象进行copy和mutableCopy

    46920

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

    当属性类型为 NSString 时,经常用此特质来保护封装性,因为传递给设置方法的新有可能指向一个 NSMutableString 类的实例。...这个类是 NSString 的子类,表示一种可修改的字符串,此时若是不拷贝字符串,那么设置完属性之后,字符串的就可能会在对象不知情的情况下遭人更改。...所以,这时就要拷贝一份“不可变” (immutable)的字符串,确保对象中的字符串不会无意间变动。只要实现属性所用的对象是“可变的” (mutable),就应该在设置新属性时拷贝一份。...当属性类型为 NSString 时,经常用此特质来保护封装性,因为传递给设置方法的新有可能指向一个 NSMutableString 类的实例。...这个类是 NSString 的子类,表示一种可修改的字符串,此时若是不拷贝字符串,那么设置完属性之后,字符串的就可能会在对象不知情的情况下遭人更改

    1K100

    Java中的mutable和immutable对象

    Java中的mutable和immutable对象 1.mutable(可变)和immutable(不可变)类型的区别 可变类型的对象:提供了可以改变其内部数据的操作,其内部的可以被重新更改。...不可变数据类型:其内部的操作不会改变内部的,一旦试图更改其内部,将会构造一个新的对象而非对原来的进行更改。...2.mutable和immutable类型的优缺点 mutable immutable 优点 可变类型会减少数据的拷贝次数,从而其效率 要高于immutable 由于内部数据不可变,所以对频发修改会产生大量的临时拷贝...,浪费空间 缺点 可变类型由于其内部数据可变,所以其风险更大 内部数据的不可变导致更加安全,可以用作多线程的共享对象而不必考虑同步问题 3.举例 Java中的String类的对象都是典型的immutable...4)如果类中的某成员为mutable类型,那么在初始化该成员或者企图使用get方法从外部对进行观察的时候,应该使用深度拷贝,确保类immutable

    95820

    Java中的可变对象(Mutable)与不可变对象(Immutable)

    但这鼓励我学习更多有关 Java 中Immutable和Mutable类的知识,以及如何在 Java 中创建自定义的Immutable。...在 Java 中,可变类和不可变类的概念指的是对象创建后状态是否可以更改。可变类是指实例创建后可以修改的类,而不可变类一旦创建就不能改变状态。 可变对象的状态可以通过修改字段或属性的方法来改变。...由于这些字段都是final字段或private字段,因此永远无法从外部更改。这使得它们不可变。 另一方面,可变类允许更改其内容。例如,带有非final字段或带有构造器的private字段的类。...如果不允许访问/更改字段,就可以使用非final字段,但这并不容易推理(但大多数情况下比较容易)。...另一方面,不可变对象通常是线程安全的,因为状态不能更改并且可以在多个线程之间安全共享。  3. 状态更改 可变对象允许更改状态,但不可变对象的状态在创建时是固定的。 4.

    32030

    IOS6学习笔记(三)

    这意味着像下面这样的声明使用ARC编译后指向的是空(nil):   NSObject *myObject1,*myObjects2;   不过要注意的是,与其他高级编程语言不同,ARC不会自动将标量的设置为零...这意味着以下几行代码声明的变量并不等于零:   int a;   int b; 2.Objective-C命名约定   如果你在Person对象中写了一个叫做newPersonName的方法,ARC...3.覆盖默认行为   虽然从技术上说我们无法覆盖LLVM的行为,但还是可以使用Clang源标注NS_RETURNS_RETAINED和NS_RETURNS_NOT_RETAINED来更改方法。...ARC允许使用一下这些所有权转移修饰符:   __bridge   __bridge_retained   __bridge_transfer   1....__bridge   它告诉ARC不要增加它的引用计数的,也不要更改所有权。   2.__bridge_retained   若想要转换C指针类型并增加引用计数的,我们可以使用第二个修饰符。

    71890

    kubernetes 中的增强特性(Kubernetes Enhancement Proposal)

    volume 的所有者以及权限 该特性的目标: volume 在 mount 时允许跳过更改其所有者以及权限; 目前,在 pod 中使用 volume 时,将 volume 挂载到容器之前时该 volume...中文件的权限以及所有者将被递归地更改为所提供的 fsGroup 的,这种更改权限的操作可能需要很长时间才能完成,尤其是在非常大的 volume 中(>=1TB)。...为了解决这一问题,社区将会在 pod 中添加一个名为 .Spec.SecurityContext.FSGroupChangePolicy 的字段,允许用户指定希望 pod 使用的 volume 权限和所有者如何更改...字段来禁止自动更新: Immutable *bool 建议使用 Immutable 的 ConfigMap/Secret 主要有两个原因: 一是 pod 使用 ConfigMap/Secret 的模式一般是通过...而使用了 Immutable 的 ConfigMap/Secret,kubelet 也就不会为建立 Watch/Poll 请求; 官方文档:20191117-immutable-secrets-configmaps.md

    1.3K10

    编码篇-iOS程序中的内存分配 栈区堆区全局区等相关知识

    字符串内存管理 NSString是一个不可变的字符串对象。这不是表示这个对象声明的变量的不可变,而是表示它初始化以后,你不能改变该变量所分配的内存中的,但你可以重新分配该变量所处的内存空间。...该对象引用计数很大,为固定不会变化,表示无限运行的retainCount,对进行retain或release也不会影响引用计数。...,而copy操作是执行了一次深拷贝(开出了新的地址,生成了新的对象), NSMutableString是NSString的子类, 因此NSString指针可以持有NSMutableString对象,我们一般不希望因为之前的变化导致属性也跟着变化...当你对指针解指针操作时,是指向原来的那个变量,所以对原来变量操作。 传引用: 压栈的是引用的副本。由于引用是指向某个变量的,对引用的操作其实就是对他指向的变量的操作。...符号表生成后就不会再改,因此指针可以改变指向的对象(指针变量中的可以改),而引用对象则不能修改。 下面图就是反映传指针的逻辑 ? ?

    1.5K20

    OC代码规范1——多用类型常量,少用#define预处理指令

    if (NO) { #define kNumber 88 } //if语句中的代码永远不会执行,但是在编译时期,编译器会编译这段代码,而这个时候编译器就会将kNumber的替换为...也就是说,编译器无需查看该常量的定义,就允许代码使用此常量,因为编译器知道,在链接成二进制二进制文件以后,肯定能找到这个常量。...不是说好使用const修饰以后就不可以更改了吗?那么这里的str为什么可以更改呢?...4,在头文件中使用extern来声明全局常量,并在相关实现文件中定义。由于此类常量会出现在全局符号表中,所以常量的名称需要以与之相关的类名做前缀。...5,使用extern const来声明的全局常量,必须并且只能初始化一次,如果对多次初始化,那么编译器会报错。

    1.5K30
    领券