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

什么是__NSArrayI和__NSArrayM?如何转换为NSArray?

什么是NSArrayI和NSArrayM?

NSArrayI和NSArrayM是Objective-C中的两种不同类型的数组。

__NSArrayI:这是一个不可变的数组,表示在创建后,数组的内容不能被修改。这种类型的数组在内存中的表现形式是一个元素的指针列表,因此它的性能更好。

__NSArrayM:这是一个可变的数组,表示在创建后,数组的内容可以被修改。这种类型的数组在内存中的表现形式是一个元素的指针列表,因此它的性能也很好。

如何转换为NSArray?

如果你想将NSArrayI或NSArrayM转换为NSArray,可以使用以下方法:

代码语言:objective-c
复制
NSArray *convertedArray = [originalArray copy];

这将创建一个新的NSArray,其中包含原始数组的所有元素。这个新的NSArray将是可变的,即使原始数组是不可变的。

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

相关·内容

iOS开发·runtime原理与实践: 方法交换篇(Method Swizzling)(iOS“黑魔法”,埋点统计,禁止UI控件连续点击,防奔溃处理)

其实点击事件在runtime里面发送消息,我们可以把要发送的消息的SEL 自己写的SEL交换一下,然后在自己写的SEL里面判断是否执行点击事件。...所以如果想对NSArray进行Swizzling,必须获取到其“真身”进行Swizzling,直接对NSArray进行操作无效的。...这是因为Method Swizzling对NSArray这些的类簇不起作用的。 因为这些类簇类,其实是一种抽象工厂的设计模式。...下面列举了NSArrayNSDictionary本类的类名,可以通过Runtime函数取出本类: 类名 真身 NSArray __NSArrayI NSMutableArray __NSArrayM...+CrashHandle.m @implementation NSArray (CrashHandle) // Swizzling核心代码 // 需要注意的,好多同学反馈下面代码不起作用,造成这个问题的原因大多都是其调用了

2.4K60

什么IoCDI?DI如何实现的?

IoC叫控制反转,Inversion of Control的缩写,DI(Dependency Injection)叫依赖注入,对IoC更简单的诠释。...控制反转把传统上由程序代码直接操控的对象的调用权交给容器,通过容器来实现对象组件的装配管理。...举个例子:一个类A需要用到接口B中的方法,那么就需要为类A接口B建立关联或依赖关系,最原始的方法在类A中创建一个接口B的实现类C的实例,但这种方法需要开发人员自行维护二者的依赖关系,也就是说当依赖关系发生变动的时候需要修改代码并重新构建整个系统...依赖注入可以通过setter方法注入(设值注入)、构造器注入接口注入三种方式来实现,Spring支持setter注入构造器注入,通常使用构造器注入来注入必须的依赖关系,对于可选的依赖关系,则setter...注入更好的选择,setter注入需要类提供无参构造器或者无参的静态工厂方法来创建对象。

67030

什么cryptojacking?如何防止,检测从中恢复

什么cryptojacking正在上升 没有人确切知道加密货币通过密码劫持开采的,但毫无疑问这种做法猖獗的。基于浏览器的密码劫持正在快速增长。...被勒索识别的风险也远低于勒索软件。密码代码秘密运行,可以长时间不被发现。一旦发现,很难追溯到源头,受害者没有什么动机去做,因为没有任何东西被盗或加密。...黑客倾向于选择像MoneroZcash这样的匿名加密货币来比较流行的比特币,因为更难追踪非法活动。 cryptojacking如何工作 黑客有两种主要方式让受害者的计算机秘密窃取加密货币。...如何检测cryptojacking 就像勒索软件一样,尽管你尽最大的努力来阻止密码攻击,但它仍然会影响你的组织。检测它可能困难的,特别是如果只有少数系统受到损害。...学习适应。借助这些经验更好地了解攻击者如何危害系统的。更新您的用户,帮助台IT培训,以便他们能够更好地识别加密尝试并作出相应的响应。

1.4K50

什么线程进程?如何创建、同步、通信、销毁的?

计算机系统中,线程进程两个基本的概念。多线程编程已经成为现代编程中比较常见的技术,因此对于线程进程的深刻理解变得尤为重要。...在 Java 中,线程虚拟机中的一种轻量级对象,每个线程拥有自己的执行堆栈程序计数器(Program Counter,PC),可以独立执行任务。...消息传递消息传递一种线程通信的方式,可以让多个线程之间通过消息来进行通信。消息传递有两种方式:共享队列直接通信。...共享队列共享队列一种消息传递的方式,多个线程可以通过一个公共的队列来发送接收消息。在使用共享队列时,需要使用互斥锁条件变量来保证数据的一致性。...直接通信直接通信一种消息传递的方式,多个线程之间通过直接发送消息来进行通信。在使用直接通信时,常用的方式有管道、套接字消息队列等。

38600

XCode调试器LLDB

程序会在这一行停止运行,并且控制台会被打开,允许我们调试器交互。那我们应该打些什么呢? help 最简单命令 help,它会列举出所有的命令。...如果你忘记了一个命令什么的,或者想知道更多的话,你可以通过 help command 来了解更多细节,例如 help print 或者 help thread。...注意,从现在开始,我们将会偷懒分别以 p e 来代替 print expression。 什么 print 命令 考虑一个有意思的表达式:p count = 18。...(lldb) e -O -- $8 ( foo, bar ) 幸运的,e -o -- 有也有个别名,那就是 po (print object...(lldb) p @"lunar" (NSString *) $13 = 0x00007fdb9d0003b0 @"lunar" 变量 现在你已经可以打印对象简单类型,并且知道如何使用 expression

1.3K60

XCode调试器LLDB

程序会在这一行停止运行,并且控制台会被打开,允许我们调试器交互。那我们应该打些什么呢? help 最简单命令 help,它会列举出所有的命令。...如果你忘记了一个命令什么的,或者想知道更多的话,你可以通过 help command 来了解更多细节,例如 help print 或者 help thread。...注意,从现在开始,我们将会偷懒分别以 p e 来代替 print expression。 什么 print 命令 考虑一个有意思的表达式:p count = 18。...(lldb) e -O -- $8 ( foo, bar ) 幸运的,e -o -- 有也有个别名,那就是 po (print object...(lldb) p @"lunar" (NSString *) $13 = 0x00007fdb9d0003b0 @"lunar" 变量 现在你已经可以打印对象简单类型,并且知道如何使用 expression

1.3K30

什么防抖节流?有什么区别?如何实现?

什么防抖 防抖策略(debounce)当事件被触发后,延迟 n 秒后再执行回调,如果在这 n 秒内事件又被触发,则重新计时 代码示例 let timer = null // 创建一个标记用来存放定时器的返回值...间隔内如果时间持续触发,就不会执行 fn 函数 timer = setTimeout(() => { fn.apply(this, arguments) }, 500) } 什么节流...setTimeout(() => { // 最后在 setTimeout 执行完毕后再把标记设置为 true (关键)表示可以执行下一次循环了 // 当定时器没有执行的时候标记永远...false,在开头被 return 掉 fn.apply(this, arguments) canRun = true }, 500) } 总结区别 防抖:如果事件被频繁触发...节流:如果事件被频繁触发,节流能够减少事件触发的频率,因此,节流有选择性地执行一部分事件!

29820

如何给女朋友解释什么并发并行

某天下班后,我在家里进行电话面试,问到面试者这样一个问题:"能不能简单介绍一下你理解的并发并行,并说明一下他们之间的关系"。...但是面试者回答的并不好,所以我在面试评价中写到:"对并发并行的概念不清楚"。这时,女朋友看到这句话。 并发并行最开始都是操作系统中的概念,表示的CPU执行多个任务的方式。...这样,给用户的感觉他在同时的进行听歌打游戏,实际上,在操作系统中,CPU在游戏进程音乐播放器进程之间来回切换执行的。...但其实你在吃不同的东西之间来回切换的。 还是我们两个人吃午饭。在吃饭过程中,你吃了米饭、蔬菜、牛肉。我也吃了米饭、蔬菜牛肉。我们两个人之间的吃饭就是并行的。...之间互不影响的。 所以,并发指在一段时间内宏观上多个程序同时运行。并行指的是同一个时刻,多个任务确实真的在同时运行。 并发并行的区别 并发,指的是多个事情,在同一时间段内同时发生了。

42320

如何给女朋友解释什么GitGitHub?

版本控制 想要介绍什么GitHub,就要介绍下什么Git,想要介绍什么Git,那就不得不提版本控制。 我们知道,如果多台计算机在同一个局域网中,可以进行局域网文件共享的。...共享者可以通过设置把自己文件共享给他人进行阅读修改。 ? 对于同一份共享文件,如果又多个人需要修改的话会发生什么事情呢?... 集中化的版本控制系统 接下来人们又遇到一个问题,如何让在不同系统上的开发者协同工作?于是,集中化的版本控制系统应运而生。...现在,每个人都可以在一定程度上看到项目中的其他人正在做些什么。而管理员也可以轻松掌控每个开发者的权限,并且管理起来也轻松容易的多。 分布式版本控制系统 集中化最显而易见的缺点中央服务器的单点问题。...book/zh/v1/ https://www.jianshu.com/p/b2ad5d9daa23 https://www.zhihu.com/question/23498424 往期文章一览 1、什么

47530

IOS 某电商App签名算法解析(二) Frida RPC调用

要点如下: 参数类型确认 NSDictionary NSArray等ObjectC对象的构造复制 ObjectC 类方法对象方法的调用 附送福利, ObjectC的nil 参数如何构造 二、步骤 参考...NSDictionaryI msg2=( functionId, body, openudid, client, clientVersion ),type: __NSArrayI...参数1的类型 NSDictionary,参数2个字符串数组 NSArray 构造NSDictionaryNSArray 毕竟我们没搞过ObjectC,只好面向谷哥编程了, [smcode.png...[rc.png] 三、总结 及时保存个好习惯。 正向编程经验对逆向工作有很大的帮助。 Frida神器。ORZ。 [ffshow.png] 我们最先衰老的不是容颜,梦想。...TIP: 本文的目的只有一个就是学习更多的逆向技巧思路,如果有人利用本文技术去进行非法商业获取利益带来的法律责任都是操作者自己承担,本文以及作者没关系,本文涉及到的代码项目可以去 奋飞的朋友们 知识星球自取

2K30
领券