最近跟着网络中的资源重写一些自定义控件,里面写的方法很好,自己在写的过程中总结了两个出现的问题,记录如下:
1 在对数组进行删除的时候,出现了如下的报错:

出错的原因是:实例无法识别的选择器,而且是NSArray的类型。
很奇怪的是,明明我创建的时候是NSMutableArray类型:

但是,后来查看时候,发现在dataArr中存储的是NSArray类型:

所以,在赋值的时候最好:

这样能避免在数组中出现了不变类型时候,又要进行值操作而引发的错误崩溃。
其实在这里还是能科普一下关于copy的使用,主要是对有可变类型如NSMutableArray、NSMutableString等。
1)对非集合类对象的操作

需要注意的是:无论被复制前的对象(如:str)是可变或者不可变,复制之后的变量都是一个不可变的类型,如果强行使用可变类型的方法appendString:,编译时不会报错,运行后直接崩溃:

2)对集合类对象的操作

当然这里还涉及到了isa指针的问题,我会放在runtime的一节中讲解
2 在tableView中排列中文的用户名时,其实先根据第一个字的首字母形成一个组,然后在组内排列。
1 首先更加系统的方法创建一个27个字符大小的数组dataArr(A-Z,#),其中#是一些无法识别的图形等。

2 创建一个27个字符大小的数组,并且将该数组中将每一个值都变成一个数组的类型。

3 对比首字符的字母,将汉字们进行一一归类。

4 去除不包含汉字的一组。

网友评论