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

每当我尝试将NSUserDefualts保存到NSMutableArray时,它就会崩溃

当尝试将NSUserDefualts保存到NSMutableArray时导致崩溃的原因可能是NSUserDefualts只能存储基本数据类型,而NSMutableArray是一个对象类型。NSUserDefualts是用于存储应用程序的偏好设置和配置信息的类,它提供了一种简单的方式来存储和检索数据。

解决这个问题的方法是将NSMutableArray转换为NSData类型,然后再存储到NSUserDefualts中。可以使用NSKeyedArchiver将NSMutableArray转换为NSData类型,然后使用NSUserDefualts的setObject:forKey:方法将NSData存储起来。

以下是一个示例代码:

代码语言:txt
复制
// 将NSMutableArray转换为NSData
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:yourArray];

// 存储到NSUserDefualts
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:data forKey:@"yourKey"];
[defaults synchronize];

在这个示例中,yourArray是你要保存的NSMutableArray对象,"yourKey"是你给数据设置的键。

当需要从NSUserDefualts中检索NSMutableArray时,可以使用以下代码:

代码语言:txt
复制
// 从NSUserDefualts中检索数据
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSData *data = [defaults objectForKey:@"yourKey"];

// 将NSData转换为NSMutableArray
NSMutableArray *array = [NSKeyedUnarchiver unarchiveObjectWithData:data];

这样,你就可以成功地将NSMutableArray保存到NSUserDefualts中了。

关于NSUserDefualts、NSMutableArray和NSData的更详细信息,你可以参考腾讯云的相关文档和产品介绍:

请注意,以上提供的链接是腾讯云相关产品和文档的示例,仅供参考。

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

相关·内容

iOS - 老生常谈内存管理(三):ARC 面世

如果管理时不注意赋值对象的所有者,便有可能遭遇内存泄漏或者程序崩溃。这点在使用时应多加注意。...如果它引用的对象被销毁,就会产生悬垂指针。 __autoreleasing用于表示通过引用(id *)传入,并在返回时(autorelease)自动释放的参数。...迁移工具在将MRC代码转换为ARC代码时,无法确定它该使用strong还是weak,所以默认使用strong。...尝试不要去思考ARC将retains/releases调用的代码放在哪里,而是思考应用程序算法,思考对象的strong和weak指针、所有权、以及可能产生的循环引用。...Q: 当我继承一个使用了 NSCopyObject 的类,如 NSCell 时,我需要做些什么? 没什么特别的。ARC会关注以前必须显式添加额外retain的情况。

2.2K10
  • 字节一面:服务端挂了,客户端的 TCP 连接还在吗?

    如果tcp_retries设置为15,且 RTT 比较小,那么 RTO 初始值就约等于下限 200ms,这意味着它需要 924.6 秒才能将断开的 TCP 连接通知给上层(即应用程序),每一轮的 RTO...如果没有开启 TCP keepalive 机制,在服务端主机发送宕机后,如果客户端一直不发送数据,那么客户端的 TCP 连接将一直保持存在,所以我们可以得知一个点,在没有使用 TCP 保活机制,且双方不传输数据的情况下...当 TCP 保活的探测报文发送给对端, 对端会正常响应,这样TCP 保活时间会被重置,等待下一个 TCP 保活时间的到来。如果对端主机崩溃,或对端由于其他原因导致报文不可达。...,如果连续几个探测报文都没有得到响应,则认为当前的 TCP 连接已经死亡,系统内核将错误信息通知给上层应用程序。...=75 net.ipv4.tcp_keepalive_probes=9每个参数的意思,具体如下:tcp_keepalive_time=7200:表示保活时间是 7200 秒(2小时),也就 2 小时内如果没有任何连接相关的活动

    2.2K30

    被鹅厂面怕了!

    这东西其实就是 TCP 的保活机制,它的工作原理我之前的文章写过,这里就直接贴下以前的内容。 ?...当 TCP 保活的探测报文发送给对端, 对端会正常响应,这样 TCP 保活时间会被重置,等待下一个 TCP 保活时间的到来。 如果对端主机崩溃,或对端由于其他原因导致报文不可达。...在没有使用 TCP 保活机制,且双方不传输数据的情况下,一方的 TCP 连接处在 ESTABLISHED 状态时,并不代表另一方的 TCP 连接还一定是正常的。 那题目中的「进程崩溃」的情况呢?...每一轮的超时时间都是倍数增长的,比如第一次触发超时重传是在 2s 后,第二次则是在 4s 后,第三次则是 8s 后,以此类推。 ?...在重传报文且一直没有收到对方响应的情况时,先达到「最大重传次数」或者「最大超时时间」这两个的其中一个条件后,就会停止重传。 ---- 最后说句。 TCP 牛逼,啥异常都考虑到了

    56130

    字节一面:服务端挂了,客户端的 TCP 连接还在吗?

    如果tcp_retries设置为15,且 RTT 比较小,那么 RTO 初始值就约等于下限 200ms,这意味着它需要 924.6 秒才能将断开的 TCP 连接通知给上层(即应用程序),每一轮的 RTO...如果没有开启 TCP keepalive 机制,在服务端主机发送宕机后,如果客户端一直不发送数据,那么客户端的 TCP 连接将一直保持存在,所以我们可以得知一个点,在没有使用 TCP 保活机制,且双方不传输数据的情况下...当 TCP 保活的探测报文发送给对端, 对端会正常响应,这样 TCP 保活时间会被重置,等待下一个 TCP 保活时间的到来。 如果对端主机崩溃,或对端由于其他原因导致报文不可达。...,如果连续几个探测报文都没有得到响应,则认为当前的 TCP 连接已经死亡,系统内核将错误信息通知给上层应用程序。...=75 net.ipv4.tcp_keepalive_probes=9 每个参数的意思,具体如下: tcp_keepalive_time=7200:表示保活时间是 7200 秒(2小时),也就 2

    1.6K20

    透彻理解 NSNotificationCenter 通知

    本篇文章主要是梳理NSNotificationCenter的特性和值得注意的地方,并且在后面结合对其特性的分析手动利用代码来实现它。...由此看来,如果当我们不是百分之百确认通知的发送队列是在主队列中时,我们最好加上如下代码从而对我们的UI进行处理。...有过比较长开发经验的同学应该都有过,没有及时的移除通知而导致意外崩溃的情况。...注意上面的代码中,我将[self _removeObserver:observer];注释掉了,意味着该方法已经被我截取了,我们再向该“移除通知未遂”的响应者observer发送通知,直接崩溃。...需要使用到的强引用属性;四是observerId属性会比较陌生,它的作用大家可以先不管,之后会有用处。

    2.4K70

    iOS内存管理-基本概念整理

    当我们通过alloc、retain等方法持有对象后,也必须有相应的release或者autorelease将其释放。...4.非自己持有的对象无法释放 在应用程序中释放非自己持有的对象就会造成崩溃,使用代码演示如下: //情况1:释放完不再需要的对象后再次释放,访问了已经废弃的对象而崩溃!...这其中就包括以下的几种情况: 编译器检查方法名是否以alloc/new/copy/mutableCopy开始,如果不是则自动将返回对象注册到autoreleasepool; 访问附有__weak修饰符的变量时...情况1:__bridge转换 /* MRC代码下,将id变量直接强制转换void*正常,但ARC下报错 id obj = [[NSObject alloc] init]; void *p = obj;...如果管理时不注意赋值对象的所有者,就容易产生野指针错误导致程序崩溃。

    1.1K31

    ReactiveCocoa 中 RACSignal 所有变换操作底层实现分析(下)

    }] setNameWithFormat:@"[%@] -flatten", self.name]; }复制代码 flatten操作必须是对高阶信号进行操作,如果信号里面不是信号,即不是高阶信号,那么就会崩溃...3. flatten: flatten:操作也必须是对高阶信号进行操作,如果信号里面不是信号,即不是高阶信号,那么就会崩溃。...那么就把当前的信号缓存到queuedSignals数组中。...如果maxConcurrent 就会崩溃。 如果maxConcurrent = 0,会发生什么?那么flatten:就退化成flatten了。 ?...虽然这个方法可以监听到发送结束的状态,但是也尽量不要使用,因为它的实现调用了firstOrDefault: success: error:方法,这个方法里面有大量的锁的操作,一不留神就会导致死锁。

    99140

    ReactiveCocoa 中 RACSignal 所有变换操作底层实现分析(下)

    }] setNameWithFormat:@"[%@] -flatten", self.name]; } flatten操作必须是对高阶信号进行操作,如果信号里面不是信号,即不是高阶信号,那么就会崩溃...3. flatten: flatten:操作也必须是对高阶信号进行操作,如果信号里面不是信号,即不是高阶信号,那么就会崩溃。...那么就把当前的信号缓存到queuedSignals数组中。...如果maxConcurrent 就会崩溃。 如果maxConcurrent = 0,会发生什么?那么flatten:就退化成flatten了。...虽然这个方法可以监听到发送结束的状态,但是也尽量不要使用,因为它的实现调用了firstOrDefault: success: error:方法,这个方法里面有大量的锁的操作,一不留神就会导致死锁。

    15410

    ElasticSearch 持久化变更

    启动时,Elasticsearch 将使用最后一个提交点从磁盘中恢复已知的段,然后将重新执行 Translog 中的所有操作,以添加最后一次提交后发生的更改。...当你试着通过ID查询、更新、删除一个文档,在尝试从相应的段中检索文档之前,首先检查 Translog 来查看最近的变更。这意味着它总是能够实时地获取到文档的最新版本。...当 Elasticsearch 尝试恢复或重新打开一个索引,它需要重新执行 Translog 中所有的操作,所以如果 Translog 中日志越短,恢复越快。 3. Translog有多安全?...在文件被 fsync 到磁盘前,被写入的文件在重启之后就会丢失。...比如,写入的数据被缓存到内存后,再每5秒整体执行一次 fsync。

    1.2K40

    iOS 客户端动图优化实践

    端内动图展示的问题以及优化结果 长期以来, 部分机型浏览 Q 音的图文流时很容易闪退, 端内其他业务也存在不少动图相关的崩溃上报记录....基于上述的问题, 应该将逐帧加载思路应用到端内, 在动图加载到内存时, 只从二进制数据中解码第一帧; 然后在 CADisplayLink 触发时解析当前需要展示的帧, 同时合理地使用帧缓存, 避免上述.... 4.3.4 在解码失败的时候尝试手动释放内存 在 App 运行中, 部分 API 如果无法申请到内存会发生 NSMallocException 崩溃, 崩溃描述为”Failed to grow buffer...图片一般是内存消耗的大户, 因此可以在图片解码失败时, 主动尝试释放图片内存缓存, 正在使用的图片不会被释放, 未被使用的图片先释放掉以腾出内存, 从而规避内存不足造成崩溃. 4.4 其他优化措施 4.4.1...而在此次优化中, 我将 maxMemoryCost 值设置成最大可用内存的 30%(线上 ABT 得出), 内存曲线就会很平缓, 能有效减少 OOM.

    5.9K40

    iOS 复制知识点总结

    1、系统对象的复制 不管是集合类对象,还是非集合类对象,接收到copy和mutableCopy消息时,都遵循以下准则: copy返回immutable对象;所以,如果对copy返回值使用mutable对象接口就会...我们继续往下, mutableCopy NSMutableArray *array = [NSMutableArray arrayWithObjects:[NSMutableString stringWithString...NSObject @property (nonatomic, assign) NSInteger age; @property (nonatomic, copy) NSString *name; @end 然后尝试调用...我们将复制副本的代码换成如下: Person *person2 = [person1 mutableCopy];//复制副本 再次运行程序,程序同样崩溃了,并输出去以下错误信息: [Person mutableCopyWithZone...copy指示符,该指示符置顶调用setName:方法时(通过点语法赋值时,实际上是调用对应的setter方法),程序实际上会使用参数的副本对name实际变量复制。

    689110

    面试时没有回答上来的一道题:一致性哈希

    我们发现,当我们增加了一个机器之后,之前几乎所有的缓存都失效了,图片明明存在其中一台机器了,可是因为计算出了不一样的哈希值,它总是跑到没有保存自己的机器上去寻找自己的下落,当然,这样的寻找肯定会落空的。...于是,当我们上线第四台机器的那一刻,我们的所有缓存几乎都失效了,后台存储图片的服务突然收到了大量因为缓存失效导致的访问,压力山大,直接崩溃了 ... 好容易缓过劲,我们细思极恐。...如果每次增加或者减少服务器,就会导致所有缓存失效,这对我们的后台服务简直是巨大的挑战,而这真的是不能避免的吗? 于是,我们引入了一致性哈希,来解决我们的问题。...于是,当我们尝试寻找A图片,发现D2已经完蛋了,此时,我们会继续顺时针往下找,直到找到D1机器,然后,将A图片重新缓存到D1机器上去。...只是当我们尝试寻找D图片,由于它顺时针下去遇到的第一个服务器节点是D4,而此时D4刚起步,啥都没有,于是D图片缓存失败,只好去后端服务器把D图片重新缓存到D4服务器。

    35110

    TCP 的 Keepalive 和 HTTP 的 Keep-Alive 是一个东西吗?

    Transfer-Encoding Transfer-Encoding是指传输编码,在上面的问题中,当服务端无法知道实体内容的长度时,就可以通过指定Transfer-Encoding: chunked来告知浏览器当前的编码是将数据分成一块一块传递的...对上述流程总结: 当网络两端建立了TCP连接之后,闲置(双方没有任何数据流发送往来)了tcp_keepalive_time后,服务器就会尝试向客户端发送侦测包,来判断TCP连接状况(有可能客户端崩溃、强制关闭了应用...如果尝试tcp_keepalive_probes次,依然没有收到对方的ack包,则会丢弃该TCP连接。TCP连接默认闲置时间是2小时,一般设置为30分钟足够了。...当 TCP 保活的探测报文发送给对端, 对端会正常响应,这样 TCP 保活时间会被重置,等待下一个 TCP 保活时间的到来。 如果对端主机崩溃,或对端由于其他原因导致报文不可达。...TCP 的 Keepalive 也叫 TCP 保活机制,该功能是由「内核」实现的,当客户端和服务端长达一定时间没有进行数据交互时,内核为了确保该连接是否还有效,就会发送探测报文,来检测对方是否还在线,然后来决定是否要关闭该连接

    1.4K20

    内存管理说明白点

    除了这些方法之外的对象,自己是无法释放的,还有就像书中写的例子一样,已经realese掉的对象你在执行其他操作,就是释放非自己持有的对象,就会造成程序崩溃。        ...      2、我们的Block是持有__block对象的,这个不必多说       3、  __block id tmp = self  这句代码就让tmp变量持有了 TestObject,在进入下面将Block...(2)、无论ARC是否有效,只要对象的所有者不在持有对象的时候该对象就会被废弃,对象被废弃时,不管ARC是否有效,都会调用对象的dealloc方法,在ARC有效的时候就不在显式的调用dealloc方法。...ARC环境中不需要我们自己再去写 autorelease NSMutableArray * array = [NSMutableArray arrayWithCapacity:1]; NSMutableArray...__unsafe_unretained修饰符相近,甚至更低,如果管理不善,没有注意渎职对象的所有者,就很容易因为野指针而造成程序崩溃        2、"__bridge_retained 转换类型",

    44520

    HTTP 长连接和短连接

    如果客户端浏览器访问的某个HTML或其他类型的 Web页中包含有其他的Web资源,如JavaScript文件、图像文件、CSS文件等;当浏览器每遇到这样一个Web资源,就会建立一个HTTP会话。...首先说一下TCP/IP详解上讲到的TCP保活功能,保活功能主要为服务器应用提供,服务器应用希望知道客户主机是否崩溃,从而可以代表客户使用资源。...客户的TCP响应正常,而服务器也知道对方是正常的,服务器在两小时后将保活定时器复位。 客户主机已经崩溃,并且关闭或者正在重新启动。在任何一种情况下,客户的TCP都没有响应。...客户主机崩溃并已经重新启动。服务器将收到一个对其保活探测的响应,这个响应是一个复位,使得服务器终止这个连接。...不过这里存在一个问题,存活功能的探测周期太长,还有就是它只是探测TCP连接的存活,属于比较斯文的做法,遇到恶意的连接时,保活功能就不够使了。

    3.4K90

    长连接和短链接的区别

    如果客户端浏览器访问的某个HTML或其他类型的 Web页中包含有其他的Web资源,如JavaScript文件、图像文件、CSS文件等;当浏览器每遇到这样一个Web资源,就会建立一个HTTP会话。...首先说一下TCP/IP详解上讲到的TCP保活功能,保活功能主要为服务器应用提供,服务器应用希望知道客户主机是否崩溃,从而可以代表客户使用资源。...客户的TCP响应正常,而服务器也知道对方是正常的,服务器在两小时后将保活定时器复位。 客户主机已经崩溃,并且关闭或者正在重新启动。在任何一种情况下,客户的TCP都没有响应。...客户主机崩溃并已经重新启动。服务器将收到一个对其保活探测的响应,这个响应是一个复位,使得服务器终止这个连接。...不过这里存在一个问题,存活功能的探测周期太长,还有就是它只是探测TCP连接的存活,属于比较斯文的做法,遇到恶意的连接时,保活功能就不够使了。

    2K30

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

    比如下面的代码就会发生崩溃 // .h文件 // 下面的代码就会发生崩溃 @property (nonatomic, copy) NSMutableArray *mutableArray; // ....m文件 // 下面的代码就会发生崩溃 NSMutableArray *array = [NSMutableArray arrayWithObjects:@1,@2,nil]; self.mutableArray...在b非nil时,a和b指向同一个内存地址,在b变nil时,a变nil。此时向a发送消息不会崩溃:在Objective-C中向nil发送消息是安全的。...;或者当运行到 someVar = var 时,由于缺 getter 方法同样会导致崩溃。...除了后三条,对其他几个我们可以总结出一个规律:当你想手动管理 @property 的所有内容时,你就会尝试通过实现 @property 的所有“存取方法”(the accessor methods)或者使用

    1K100
    领券