- 假设有一个字符串aabcad,请写一段程序,去掉字符串中不相邻的重复字符串,即上述字符串处理之后的输出结果为:aabcd
- NSMutableArray *marry = [[NSMutableArray alloc]init];
-
for (int i = 0; i < str.length - 1; i++) { -
unsigned char a = [str characterAtIndex:i]; -
for (int j = i + 1; j < str.length; j++) { unsigned char b = [str characterAtIndex:j]; if (a == b) { if (j == i + 1) {
}else{ [marry addObject:[NSString stringWithFormat:@"%d",j]]; } } } } for (int i = marry.count - 1; i > 0; i--) {
NSInteger num = [[marry objectAtIndex:i]intValue]; [str deleteCharactersInRange:NSMakeRange(num, 1)]; } 2 获取一台设备唯一标识的方法有哪些?
在iOS系统中,获取设备唯一标识的方法有很多:
访问UIDIDs的程序将不再被审核通过,所以UDID是绝对不能用了
一.UDID(Unique Device Identifier) 2013年5月1日
二.UUID(Universally Unique Identifier) 中文意思是通过唯一识别码 。苹果公司建议使用UUID为应用生成唯一标识字符串 。要考虑应用被删除再重装的情况。此时想到了keychain(钥匙串)其不会因为App被删除而丢失,用这个特点来保存设备的唯一标识
三.MAC Address iOS7 以后的系统,机子的MAC Address都是一样的,没办法区分,弃用此方法
四.OPEN UDID 如果把使用了OpenUDID方案的应用全部删除,再重新获取OpenUDID ,此时的OpenUDID跟从前的不一样了,这种方法不保险
五.广告标示符(IDFA-identifierForIdentifier)iOS6 中提供的方法advertisingIdentifier 通过调用方法返回一个NSUUID实例,最后可以获得一个UUID,有系统存着 可以还原 (设置程序 -> 通用 -> 还原 -> 还原位置与隐私 ;设置程序-> 通用 -> 关于本机 -> 广告 -> 还原广告标示符) 需要重启设备)
六.Vindor标示符 (IDFV-identifierForVendor) iOS6 增加的 跟advertisingIdentifier一样,该方法返回一个NSUUID ,可以获得一个UUID
七.推送token+bundle_id apple push token保证设备唯一,但必须有网情况下才工作,该方法不依赖于设备本身,但依赖于apple push
(详解 请看博客单篇介绍 iOS设备唯一标识获取策略 ios设备唯一标识获取策略
)
3 iOS类是否可以多继承?如果没有,那可以用其他方法实现吗?简述实现过程。
其实我们在学习设计模式的时候知道,多继承的效率不高,而且采用组合的模式可以完全代替继承模式。那么,这种思路完全可以用在OC中实现多继承(或许OC抛弃多继承,就是强迫我们使用更高效的组合设计模式吧!)。下面用实际的代码来表示组合如何来代替多继承。
现在ClassC需要继承ClassA中methodA、ClassB中methodB,具体的代码实现为:
//定义ClassA以及其methodA
@interface ClassA : NSObject {
}
-(void)methodA;
@end
//定义ClassB以及其methodB
@interface ClassB : NSObject {
}
-(void)methodB;
@end
//定义ClassC以及其需要的methodA,methodB
@interface ClassC : NSObject {
ClassA *a;
ClassB *b;
}
-(id)initWithA:(ClassA *)A b:(ClassB *)B;
-(void)methodA;
-(void)methodB;
@end//注意在ClassC的实现
@implementation ClassC
-(id)initWithA:(ClassA *)A b:(ClassB *)B{
a=[[ClassA alloc] initWithClassA: A];//[A copy];
b=[[ClassB alloc] initWithClassB: B];//[B copy];
}
-(void)methodA{
[a methodA];
}
-(void)methodB{[b methodB];
}
上面是采用组合的方式实现了多继承的功能,解决了OC不能多继承的语法。那么还有其他的方式来实现多继承吗?
虽然OC在语法上禁止类使用多继承,但是在协议的遵守上却允许使用多继承。所以可以用协议来实现多继承。但是协议只能提供接口,而没有提供实现方式,如果只是想多继承基类的接口,那么遵守多协议无疑是最好的方法,而既需要多继承接口,又要多继承其实现,那么协议是无能为力了。多协议遵守比较简单,具体的实现方式这里就不讲了!
4 堆和栈的区别
数据结构的栈和堆 实际上时两种数据结构:堆和栈
堆和栈都是一种数据项按序列的数据结构
栈是具有后进先出性质的数据结构,就是后存放的先取,先存放的后取
堆是一种经过排序的树形数据结构,每个结点都有一个值。堆的存取是随意的
内存分配中的栈和堆
前面说数据结构的堆和栈是为了说现在堆区和栈区区分
内存中栈区处于相对较高的地址以地址的增长方向为上的话,栈地址是向下增长的
栈中分配局部变量空间,堆区是向上增长用于分配程序员申请的内存空间
1 申请方式和回收方式不同
栈是系统自动分配空间的 堆则是程序员需要自己申请的空间 。所以栈上的数据,系统自动释放,堆上的数据只要程序员不释放就一直存在,可能造成内存泄露。
2 申请后系统的响应
栈:只有栈的剩余空间大于申请空间,系统为程序提供内存,否则将报异常提示栈溢出
堆 : 操作系统有一个记录空闲内存地址的链表,当系统收到程序内存申请,会遍历链表,寻找第一个空间大于所申请空间的堆,并在首地址处记录本次分配的大小,将多余的部分重新放入空闲链中
3 申请效率的比较
栈:由系统自动分配,速度较快,但程序员无法控制
堆 : 是由new分配的内存,一般速度比较慢,而且容易产生内存碎片,不过用起来最方便
4 申请大小的限制
栈 : 栈是向低地址扩展的数据结构, 是一块连续的内存的区域 ,能从栈获得空间较小
堆 : 堆是向高地址扩展的数据结构,是不连续的内存区域,堆获取的空间比较灵活,也比较大
5 堆和栈的存储内容
栈: 在函数调用时,第一个进栈的是主函数中函数调用后的下一条指令的地址,然后是函数的各个参数(参数一般由右向左入栈),然后是函数中的局部变量(注意静态变量不入栈)
堆 : 一般是在堆的头部用一个字节存放堆的大小。堆中的具体内容程序员安排
6 存取效率的比较
char s1[] = @“aaaa”; // 在运行时刻赋值,放在栈中
char *s2 = @“bbbb” ; // 在编译时确定,放在堆里
但是,在以后的存取中,在栈上的数组比指针指向的字符转(例如堆)快
5 iOS本地数据存储都有哪几种方式?
<span style="font-size:18px;"><span style="word-wrap: normal; word-break: normal; line-height: 27px; font-size: 18px;">答:</span><span style="word-wrap: normal; word-break: normal; line-height: 27px; font-size: 18px;"><span style="word-wrap: normal; word-break: normal; line-height: 26px; font-family: Tahoma, Arial, Helvetica, sans-serif, simsun;">1. <wbr>NSKeyedArchiver(加密形式)</wbr></span><span style="word-wrap: normal; word-break: normal; line-height: 26px; font-family: Tahoma, Arial, Helvetica, sans-serif, simsun;"> <wbr></wbr></span><span style="word-wrap: normal; word-break: normal; line-height: 26px; font-family: Tahoma, Arial, Helvetica, sans-serif, simsun;"> <wbr> <wbr> <wbr></wbr></wbr></wbr></span></span> </span>
2. NSUserDefaults
3. Write写入方式
4. SQLite3 (详见单篇解释 数据保存几种方式总结 iOS 数据保存几种方式总结
)
6 iOS动态类型和动态绑定、动态载入
(详见单篇解释 源自收藏 Objective-C多态:动态类型识别+动态绑定+动态加载)
iOS 面试题总结 (二)
最新推荐文章于 2019-04-11 15:15:40 发布