1.假设有一个字符串aabcad,请写一段程序,去掉字符串中不相邻的重复字符串,即上述字符串处理之后的输出结果为:aabcd(缺少去除空格)
答:本题的题意是以第一个出现的字母作为参照,只要之后出现相同的字母并且和第一个字母不相邻,那么就删除。为防止删除某些字符之后,把之前不相邻的重复字符串转化为相邻字符串,所以可以先用空格替换掉需要删除的字符,最后对数组里面的空格进行处理。
-(void)removeRepeat:(NSString *)aNum
{
NSMutableArray *mArr = [[NSMutableArrayalloc]initWithCapacity:10];
for (int i = 0;i < aNum.length;i++)
{
[mArr addObject:[aNumsubstringWithRange:NSMakeRange(i,1)]];
}
NSLog(@"- %@", mArr);
[self compareNum:mArr];
NSLog(@"%@",mArr);
}
//比较是否相等
-(NSMutableArray*)compareNum:(NSMutableArray *)mArr
{
int count = mArr.count;//重新定义了,count不会减一
for (int j = 0; j < count - 1; j++)
{
for (int i = j; i < count - 1-1-1; i++)
{
NSLog(@" %@ %@",[mArr objectAtIndex:j],[mArrobjectAtIndex:i + 2]);
NSString *a = [mArr objectAtIndex:j];
NSString *b = [mArr objectAtIndex:i+2];
if ([a isEqualToString:b])
{
[mArr replaceObjectAtIndex:i + 2withObject:@" "];
}
}
}
return mArr;
}
2.获取一台设备唯一标识的方法有哪些?
答:1.UDID(13.5.1禁用)
2.UUID
3.MAC ADDRESS (禁用)
4.OPEN UDID (升级后改变)
5.广告标识符 (升级后改变)
6.Vindor标示符
上面的都是废的:ios7之后能用的时keychain(钥匙串)
3.ios类是否可以多继承?如果没有,那可以用其他方法实现吗?简述实现过程。
答:没有 用代理(代理遵循协议),协议(声明一堆方法),消息转发,来实现。实现过程就是写一个协议
4.堆和栈的区别?
答:堆需要用户手动释放内存,而栈则是编译器自动释放内存
补充:内存分5个区:堆,栈,全局(静态),常量,代码。
全局区(静态区)(static)--全局变量和静态变量。程序结束后由系统释放。
文字常量区--常量字符串存放在这里。程序结束后由系统释放。
程序代码区—存放函数体的二进制文件。
5.ios本地数据存储都有哪几种方式?
答:
1、 NSKeyedArchiver(归档)采用归档的形式来保存数据,该数据对象需要遵守NSCoding协议,并且该对象对应的类必须提供encodeWithCoder:和initWithCoder:方法。
2、NSUserDefaults:用来保存应用程序设置和属性、用户保存的数据。用户再次打开程序或开机后这些数据仍然存在。NSUserDefaults可以存储的数据类型包括:NSData、NSString、NSNumber、NSDate、NSArray、NSDictionary。
3、Write写入方式:永久保存在磁盘中。
4、SQLite(FMDB、CoreData)
NSCoding + NSKeyedArchiver实现复杂对象的存储。