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

是NSString值一旦提供了值就无法更改?

是的,在Objective-C中,NSString类型的变量一旦声明和初始化,其值就无法更改。这是因为NSString类本身是不可变的,这意味着在将值分配给NSString变量时,该值将无法更改。

如果您需要在NSString中存储可更改的值,则可以使用其他可更改的数据类型,例如NSNumberNSDictionary。如果您需要使用NSString类型来包含不可更改的值,则可以使用NSConstantString类,该类在编译时被转换为NSString,但在运行时是不可变的。

以下是一个示例代码段,演示如何使用NSConstantString来存储不可更改的字符串:

代码语言:objective-c
复制
// 定义一个常量字符串,用于存储不可更改的字符串
NSString *const kMyConstantString = @"My Constant String";

在上面的示例中,kMyConstantString被声明为一个常量,其类型为NSString *const。该常量的值是"My Constant String",这是一个不可更改的字符串。如果您尝试更改该常量的值,则会引发一个错误。

需要注意的是,在Swift和Objective-C之间,上述实现方法可能有所不同。

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

相关·内容

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

value) NSDictionary中的键(key),通常是字符串,也可以是其他对象类型 NSDictionary中和键(key)关联的(value)可以是任何对象类型,但不能nil NSDictionary...不可变的,一旦初始化完毕,里面的内容无法修改 2.NSDictionary的创建 + (instancetype)dictionary; + (instancetype)dictionaryWithObject...NSMutableDictionary 1.NSMutableDictionary介绍 NSMutableDictionaryNSDictionary的子类 NSDictionary不可变的,一旦初始化完毕后...,它里面的内容永远固定的,不能删除里面的元素,也不能再往里面添加元素 NSMutableDictionary可变的,随时可以往里面添加\更改\删除元素 2....NSMutableDictionary的常见操作 添加/修改一个键值对(如果aKey之前有,则会把aKey之前对应的给替换掉)- (void)setObject:(id)anObject forKey

69650

iOS-Foundation框架中常用的类

NSStringOC中最常用的1个类,所以OC提供一种更为快速的创建字符串对象的方式:使用前缀@ @"jack";本质上这是1个NSString对象,这个NSString对象中存储的"jack...当在内存中创建1个字符串对象以后,这个字符串对象的内容无法更改,当我们重新为字符串指针初始化的时候,并不是修改原来的字符串对象,而是重新的创建1个字符串对象并将这个字符串对象的地址重新复制给字符串指针变量...到遇到不能转换的时候停止转换. 去掉字符串前后的空格,中间的空格无法去掉。...NSArray不可变得,一旦初始化完毕之后,它里面的元素永远固定的,无法删除和新增元素 NSArray的创建 + (instancetype)array; // 创建一个没有任何元素的数组 + (...NSDictionary字典一旦创建完毕,其键值对的个数已经固定,无法删除,新增。

1.7K100

《Effective Objective-C》干货三部曲(二):规范篇

然后,提供来增加和删除这个set里的元素的公共接口。...然而有时,我们需要在更改set数据的同时要执行隐秘在实现文件里的其他工作,那么如果在外部随意更改这个属性的话,显然达不到这种需求的。...对于返回布尔的方法,我们也要注意命名的规范: 获取”是否“的布尔,应该增加“is”前缀: - isEqualToString: 获取“是否有”的布尔,应该增加“has”前缀: - hasPrefix...第48条:多用块枚举,少用for循环 当遍历集合元素时,建议使用块枚举,因为相对于传统的for循环,它更加高效,而且简洁,还能获取到用传统的for循环无法提供: 我们首先看一下传统的遍历: 传统的for...", self); } } 这样一来,EOCBaseClass的子类EOCSubClass无法再调用initialize方法

79410

iOS_单元测试三之OCMock使用

10.5、NSString和NSArray上的类方法无法存根或验证 10.6、NSManagedObject的类方法及其子类无法存根或验证 10.7、无法验证 NSObject 上的方法 10.8、无法验证核心...OCMock知道KVO,并小心避免与之发生冲突 对于其它框架,OCMock仅提供一种选择退出模拟以免发生意外行为的机制 + (BOOL)supportsMocking:(NSString **)reason...当开发人员尝试为此类创建模拟程序时,将引发异常,解释问题说在 该方法在单独调用中返回不同的可以接受的,这使它在运行时对特定条件做出反应 如果该方法为reason赋值,返回将被忽略 对于所有未实现此方法的类...toll-free bridged 类的实例创建局部模拟 无法为 某些实例创建以标记指针表示的对象,如:NSString、在某些体系结构上、NSDate在某些体系结构上 10.4、某些方法无法存根或验证...上的类方法无法存根或验证 // 无法生效、该方法将不会被存根 id stringMock = OCMClassMock([NSString class]); // 无法NSString和NSArray

3.1K20

《Effective Objective-C》干货三部曲(二):规范篇

然后,提供来增加和删除这个set里的元素的公共接口。...然而有时,我们需要在更改set数据的同时要执行隐秘在实现文件里的其他工作,那么如果在外部随意更改这个属性的话,显然达不到这种需求的。...对于返回布尔的方法,我们也要注意命名的规范: 获取”是否“的布尔,应该增加“is”前缀: - isEqualToString: 获取“是否有”的布尔,应该增加“has”前缀: - hasPrefix...第48条:多用块枚举,少用for循环 当遍历集合元素时,建议使用块枚举,因为相对于传统的for循环,它更加高效,而且简洁,还能获取到用传统的for循环无法提供: 我们首先看一下传统的遍历: 传统的for...", self); } } 这样一来,EOCBaseClass的子类EOCSubClass无法再调用initialize方法

89821

实践-小细节 Ⅰ

点击搜索后,停止编辑后,系统的单航条就会出现,而且通过代理来手动隐藏无法做到的,所以,在使用  UISearchBar & UISearchDisplayController时不要使用自定义的导航条,...UIDatePicker 这个时间选择器的显示,会随着手机的语言设置而不同,对于用模拟器的小伙伴,默认的显示样式英文的,当把模拟器的语言设置成简体中文时变成这样 ?...控件都是全局变量,后续需要设置的情况下放弃  For循环,转而一个个地去实现,其实我们大可以继续使用for 循环,在循环中生成一个局部变量,把这个局部变量设置好,加载上,最后对于不同的 i 下把这个局部变量的指针赋值给...、center等等 options: 有4个,分别是: NSKeyValueObservingOptionNew 把更改之前的提供给处理方法 NSKeyValueObservingOptionOld...把更改之后的提供给处理方法 NSKeyValueObservingOptionInitial 把初始化的提供给处理方法,一旦注册,立马就会调用一次。

1.6K20

iOS 本地推送概念步骤:属性:点击通知跳到指定控制器界面快捷回复功能(iOS 8以后可用), category 属性的使用方法

UserInfo 的发送通知时所携带的参数) NSArray *notifiArray = [[UIApplication sharedApplication] scheduledLocalNotifications...]; for (UILocalNotification *local in notifiArray) { //将来可以根据UserInfo的,来查看这个是否你想要删除的通知 if (...@property(nullable, nonatomic,copy) NSString *alertAction; 锁屏界面默认的回复来查看 ?...,最小单位分钟,0代表不重复,如果此属性设置, 那么调度池不会用完释放!...案例结构,tabBarController的索引分别为0 1 2 1、接收到本地通知后调用(AppDelegate中),该方法只有程序前台或后台的时候才有用,退出无法接收到消息即无法跳转,如需要在程序退出时推送通知

2.5K60

iOS滑动条UISlider的使用方法

这里要注意的一点,滑动条的高度,如果设为0,其实还是会正常显示。但是!一旦高度设为0,滑动条将不能左右滑动!我入过这个坑。。。找了半天没找到原因,最终发现是这里的问题。...如上所示,在代码中,我们设置最大、最小、当前。...也可以改变滑动条左边、右边一集滑块本身的颜色,不过我们这里采用默认的设置,更改方法代码中也写了。除了可以设置颜色外,还可以设置最大最小处的图片。...的并不是直接定义的,而是获取滑动条的最大、最小、当前,然后取小数点前一位显示的,因为滑动条连续变化的,其浮点型的连续小数,如果不取小数点后的位数,得到的将是没有规律的小数。...3.现在来看拖动滑动条时的响应方法: 我们要做到的当前的label显示的内容随着滑动条的滑动而变化,那么只需要在滑动条的响应方法中设置label的显示内容就可以,注意同样要取小数点前一位: //

2.3K20

KVO编程指南

如果该属性一个对象,则直接提供。如果该属性标量或C结构,则该将包装在一个NSValue对象中(与键值编码一样)。...如果您为每个关键路径提供唯一的上下文,如下所示,一系列简单的指针比较会同时告诉您该通知是否适用于此观察者,如果,那么哪个关键路径发生了变化。...通常,如果遵循标准的Cocoa编码和命名约定,则可以使用自动更改通知 - 不必编写任何其他代码。 手动更改通知提供何时发出通知的额外控制,并且需要额外的编码。...自动发出通知 NSObject提供自动键值更改通知的基本实现。 自动键值更改通知通知观察者使用键值兼容访问器所做的更改以及键值编码方法。...手动更改通知提供执行此操作的方法。 手动和自动通知不是相互排斥的。除了已有的自动通知外,您还可以自由发布手动通知。更典型的,你可能想完全控制一个特定属性的通知。

85120

iOS 通讯录相关序一、介绍二、弹出系统通讯录程序三、代理方法四、不需要弹出联系人控制器就可以获取联系人信息的方法五、iOS 9 新出的点击通讯录的获取信息的办法

---- 一、介绍 1.在iOS中,有2个框架可以访问用户的通讯录: AddressBookUI.framework 提供联系人列表界面、联系人详情界面、添加联系人界面等 一般用于选择联系人 AddressBook.framework...实例 第2个参数ABPropertyID属性关键字,定义在ABPerson.h中,下面有介绍 注意:使用ABRecordCopyValue可以从一条Person记录中获取到对应的,但是后续还需要根据的具体类型再加以处理...(比如简单属性取的不需要再处理,多重属性的还需要通过其它函数再取值) ---- ABPropertyID联系人属性介绍 ABPropertyID 就是联系人的属性,所有的属性常量值都定义在ABPerson.h...kABPersonAddressProperty (3)多重属性:电话号码 kABPersonPhoneProperty 、电子邮件 kABPersonEmailProperty 等 联系人的有些属性没这么简单...打印查看标签和 // 获取电话,电话多数据类型 ABMultiValueRef phones = ABRecordCopyValue(person, kABPersonPhoneProperty

1.7K60

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

属性概念 属性OC的一项特性,用于封装对象中的数据 OC对象通常会把其所需要的数据保存为各种属性 属性通过存取方法来访问(setter、getter) 例如:在Person类中定义2个属性 通过...(NSString *)lastName; - (NSString *)lastName; @end 访问属性时,可以使用点语法,一个编译器的特性,编译器会把“点语法”转换为对存取方法的调用,使用点语法和直接调用存取方法的效果一致...,会出现无法预料的结果,一般属性设置都是nonatomic,因为iOS中使用同步锁的开销比较大,会影响性能 读写权限 readwrite:属性拥有getter、setter方法 readonly...: 属性拥有getter方法 内存管理关键字 assign:用于修饰数值类型,简单赋值操作 strong:为这种属性设置新时,设置方法会先保留新,并释放旧,然后再把新设置过去 weak...(当属性类型为NSString时,经常用copy,因为传递给设置方法新有可能指向一个NSMutableString类的实例,这个类NSString的子类,若不拷贝字符串,那么设置完属性后,字符串的就可能会在对象不知情的情况下被人更改

23410

《Effective Objective-C》干货三部曲(一):概念篇

本书iOS程序员入门的必读书籍,它讲述在iOS开发中(Objective-C语言)可以遵循的规范和一些开发技巧。...同等性判断 ==操作符比较的指针,也就是内存地址。 然而有的时候我们只是想比较指针所指向的内容,在这个时候,就需要通过isEqual:方法来比较。...有时,我们无法确定在某个操作后引用计数的确切,而只能判断这个操作递增还是递减了保留计数。 2....使用举例:如果我们想释放当前需要使用的方法返回,可以将其暂时放在自动释放池中: - (NSString*)stringValue { NSString *str = [[NSString...,NSArray,NSDictionary等 CFoundation框架:C语言API,Foundation框架中的许多功能,都可以在这里找到对应的C语言API CFNetwork框架:C语言API,提供

90920

Objective-C中的属性机制

Objective-C 2.0中的属性机制为我们提供便捷的获取和设置实例变量的方式,也可以说属性为我们提供一个默认的设置器和访问器的实现。...        因为要用protected 或者 private来隐藏类的内部细节,用类或者对象是没法直接访问被隐藏的细节的,所以要用getter和setter来访问被隐藏的实例变量,OC中的属性机制就为我们提供默认的...@property int idNumber; //定义其他方法 @end   2.属性的实现  在实现文件中我们用@synthesize来实现,用@synthesize来修饰相应的变量起到类...property的可读写性     ​    ​    ​property的可读写性决定属性是否有setter方法     ​    ​    ​(1)readwrite : 指定属性可读写的,这是默认...中的语义 :决定以何种方式对数据成员赋予新     strong : 表示强引用关系,即拥有对象的所有权。

1.3K70

老司机读书笔记——Effective Objective-C 2.0阅读笔记

如此操作后和能会由于竞态使得部分情况外部可以修改属性,外部也可通过KVC来更改属性 ---- 4.将类的实现代码分散到便于管理的数个分类之中 通过分类机制,可以把类代码分成很多个易于管理的小块,...另外performSelector返回只能id类型的对象,基本数据类型可能需要开发人员进行进一步的类型转换。 如果想要添加延时任务,条件允许的情况下应尽可能选择GCD。...与快速遍历法相比,他还要多用一些代码,可是却能提供遍历时所针对的下标,在遍历字典时也能同时提供键与,而且还有选项可以开启并发迭代功能,所以多写这点代码还是值得的。...由于此方法遵从普通的覆写机制,所以通常应该在里面判断当前要初始化的哪个类。...无法在编译器设定的全局常量,可以放在+initialize方法里初始化。 好的,今天的内容就到这里,有什么问题可以来老司机的个人博客、GitHub

44620

IOS6学习笔记(三)

1.ARC空声明变量   使用ARC的另一个优势所有未初始化的变量默认都是“空化”的。...这意味着像下面这样的声明使用ARC编译后指向的(nil):   NSObject *myObject1,*myObjects2;   不过要注意的,与其他高级编程语言不同,ARC不会自动将标量的设置为零...3.覆盖默认行为   虽然从技术上说我们无法覆盖LLVM的行为,但还是可以使用Clang源标注NS_RETURNS_RETAINED和NS_RETURNS_NOT_RETAINED来更改方法。...也就是说,我们可以将CFString*通过类型转换变成NSString*类型。而有ARC,我们便无法再这么做了,至少不指定一个所有权转移修饰符时确实如此。   ...__bridge   它告诉ARC不要增加它的引用计数的,也不要更改所有权。   2.__bridge_retained   若想要转换C指针类型并增加引用计数的,我们可以使用第二个修饰符。

69490

iOS开发之AddressBook框架详解

iOS开发之AddressBook框架详解 一、写在前面     首先,AddressBook框架一个已经过时的框架,iOS9之后官方提供Contacts框架来进行用户通讯录相关操作。...尽管如此,AddressBook框架依然一个非常优雅并且使用方便的通讯录帮助库。本篇博客只要总结AddressBook框架的相关使用方法。    ...//可以进行使用 } //释放内存 CFRelease(addressBookRef); }); } ABAuthorizationStatus授权状态的枚举...kABAuthorizationStatusNotDetermined = 0, // 尚未申请过授权 kABAuthorizationStatusRestricted, // 授权被限制 无法使用...相关的其他常用函数: //存储通讯录 bool ABAddressBookSave(ABAddressBookRef addressBook, CFErrorRef* error); //获取通讯录是否有未保存的更改

1.5K10

Objective-C笔记

NSString提供字符串的类包装, 包含了所有你期望的优点,包括对保存任意长度字符串的内建内存管理机制,支持Unicode,printf风格的格式化工具, 等等。...因为这种字符串使用的非常频繁,Objective-C提供一个助记符@可以方便地从常量值创建NSString对象。...以下三种声明在运行时效力完全相同的, 但是三种声明提供一个比一个更明显的类型信息, 附加的类型信息让编译器在编译时可以检查变量类型,并对类型不符的变量提出警告。...消息转发 一个对象收到消息之后,他有三种处理消息的可能手段,第一回应该消息并运行方法,若无法回应, 则可以转发消息给其他对象,若以上两者均无,就要处理无法回应而抛出的例外。...例如若系统提供的字符串类的实现中不包含拼写检查的功能,可以增加这样的功能而无需更改原有的字符串类的代码。

90840

iOS:KVOKVC 的概述与使用

KVO 一,概述 KVO,即:Key-Value Observing,它提供一种机制,当指定的对象的属性被修改后,则对象就会接受到通知。...    [stockForKVO release];   }   四,小结 KVO这种编码方式使用起来很简单,很适用与datamodel修改后,引发的UIVIew的变化这种情况,就像上边的例子那样,当更改属性的后...遍历出name这个key,去模型中查找有没有setName:方法,找到直接调用,给模型的成员属性赋值。...//通过person自己的函数来更改name   48.      [p changeName];   49.   50.  结果  51. ...最后一次修改直接修改  所以没法产生通知 四,小结 KVO/KVC这种编码方式使用起来很简单,很适用与datamodel修改后,引发的UIVIew的变化这种情况,就像上边的例子那样,当更改属性的

1.5K80
领券