这个栏目将持续更新--请iOS的小伙伴关注!
整理不易,如果您觉得还不错,麻烦在文末 “点个赞” 或者 评论 “Mark”,谢谢您的支持
1、字符串常用方法
字符串截取NSString *strSub = [str substringFormIndex:2];
NSString *strSubT = [str substringToIndex:2];
NSString *strSubR = [str substringWithRange:range];
字符串替换
NSString *newStr = [str stringByReplacingOccurencesOfString:@"ll" withString:@"al"];
编码,把UTF8编码的字符串编码成URL中可用的字符串
url_cn = [url_cn stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
字符串转数组
NSArray *array = [str componentsSeparatedByString:@","];--分隔符
数组转字符串
NSString *str = [array componentsJoinedByString:@","];--分隔符
字符串转字典
NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
NSError *err;
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:jsonData
options:NSJSONReadingMutableContainers
error:&err];
字典转字符串
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dic options:NSJSONWritingPrettyPrinted error:&parseError];
内容总览:
下面我就给大家展示当下最热门的知识点内容!
·iOS面试题答案PDF文集
最新 初级iOS 面试题
最新 中级iOS 面试题
最新 高级iOS 面试题
《BAT面试资料全集》
《BAT大厂常问iOS面试题》
《2021年面试真题》
《iOS开发面试题200道-面试问答篇》
《iOS开发笔试题600道-笔试手写篇》
《iOS中级到高级面试题完整版》
2、数组
数组替换
[_dataSource replaceObjectAtIndex:1 withObject:recentArray];
数组倒序
NSArray *array = @[@1, @20, @3, @10, @2];//排序后到新数组里
NSArray *sortedArray = [array sortedArrayUsingComparator:^NSComparisonResult(NSNumber* obj1, NSNumber* obj2) {
if ([obj1 intValue] > [obj2 intValue]) {
return NSOrderedDescending;
} else {
return NSOrderedAscending;
}
}];
3、浅谈iOS开发中方法延迟执行的集中方式
1》performSelector方法
- (void)performSelector:(SEL)aSelector withObject:(nullable id)anArgument afterDelay:(NSTimeInterval)delay;
2》NSTimer定时器
+ (NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)ti target:(id)aTarget selector:(SEL)aSelector userInfo:(nullable id)userInfo repeats:(BOOL)yesOrNo;
3》NSThread线程的sleep
+ (void)sleepForTimeInterval:(NSTimeInterval)ti;
4》GCD
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delayInSeconds * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
});
4、写一个完整的代理,包括生命、实现
//创建
@protocol MyDelegate
@required
-(void)eat:(NSString *)food;
@optional
-(void)run;
@end
//声明.h
@interface person:NSObject<MyDelegate>
@end
//实现.m
@implementation person
-(void)eat:(NSString *)food{
}
-(void)run{
}
@end
5、BAD_ACCESS在什么情况下出现
这种问题在开发时经常遇到,原因是访问了野指针,比如访问已经释放的对象的成员变量或者发消息、死循环等。
6、lldb(gdb)常用的控制台调试命令
1》p 输出基本类型,是打印命令,需要指定类型,是print的简写
p (int)[[[self view] subviews] count]
2》po 打印对象,会调用description方法,是print-object的简写
po [self view]
3》expr 可以在调试时动态执行制定表达式,并将结果打印出来。常用于在调试过程中修改变量的值。
4》bt 打印调用堆栈,是thread backtrace的简写,加all可打印所有的thread的堆栈。
5》br l 是breakpoint list的简写。
7、你一般是怎么用Instruments的?
Instruments里面工具很多,常用的有:
1》Time Profiler:性能分析
2》Zoombies:检查是否访问了僵尸对象,但是这个工具只能从上往下检查,不智能
3》Allocations:用来检查内存,写算法的那批人也用这个来检查
4》Leaks:检查内存,看是否有内存泄漏
8、iOS常用的数据存储方式有哪些?
数据存储有四种方案:NSUserDefault、KeyChain、file、DB。
其中File有三种方式:plist、Archive(归档)
DB包括:SQLite、FMDB、CoreData
9、Runtime可以做什么事情
1》获取类里面的所有成员变量
2》为类动态添加成员变量
3》动态改变类的方法实现
4》为类动态添加新的方法
10、WKWebView与UIWebView的比较替换
相比于UIWebView的优势
1》在性能、稳定性、占用内存方面有很大提升
2》允许JavaScript的Nitro库加载并使用(UIWebView中限制)
3》增加加载进度实行:estimatedProgress,不用再自己写进度条了
4》支持了更多的HTML属性。
11、iOS常见加密方式
1》base64加密:基本原理是原本是8个bit一组表示数据,改为6个bit一组表示数据,不足的部分补零,每两个0用一个 = 表示;用base64编码之后,数据长度会变大,增加了大约1/3左右;可进行反向解密;编码有个非常显著的特点,末尾有个 = 号
2》MD5加密:把任意一个长度的字符串换成一定长度的十六进制的大整数
3》AES加密
4》RSA加密
12、drawRect
1》我们只能在继承了UIView的子类中通过重写drawRect方法来绘制图形
2》如果需要绘制图形的子类直接继承自UIView,则子类的drawRect中不需要调用父类方法[super drawRect:rect]
;。如果子类继承自其它继承UIView的view类,则drawRect方法中需要调用父类方法[super drawRect:rect]
;。
3》drawRect方法不能手动直接调用,我们可以通过调用其它方法来实现drawRect方法的调用。如:在子类初始化时调用- (instancetype)initWithFrame:(CGRect)frame
方法,且frame不为CGRectZero时。
4》我们可以调用setNeedsDisplay()
方法或setNeedsDisplayInRect
方法,但是该方法不会自己调用drawRect方法,而是会标记视图,并在下一次循环更新的时候让视图通过drawRect来进行重绘,前提是rect不为CGRectZero。
13、iOS开发中的锁
1》临界区:指的是一块对公共资源进行访问的代码,并非是一种机制或者算法。
2》互斥锁:是一种用于多线程编程中,防止两条线程同时对同一个公共资源进行读写的机制,该目的通过将代码切片成一个一个的临界区而达成。
3》自旋锁:是用于多线程同步的一种锁,线程会反复检查锁变量是否可用。由于线程在这一过程中保持执行,因此是一种忙等待。一旦获取了自旋锁,线程会一直保持该锁,直至显示释放自旋锁。自旋锁避免了进城上下文的调度开销,因此对于线程只会阻塞很短时间的场合是有效的。
4》读写锁:是计算机程序的并发控制的一种同步机制,也称“共享-互斥锁”、多读者-单写者锁,用于解决多线程对公共资源的读写问题。读操作可并发重入,写操作是互斥的。读写锁通常用互斥锁、条件变量、信号量实现。
5》信号量:是一种更高级的同步机制,互斥锁可以说是semaphore在仅取值0/1的特例。信号量可以有更多的取值空间,用来实现更加复杂的同步,而不单单是线程间互斥。
6》条件锁:就是条件变量,当进城的某些资源要求不满足时就进入休眠,也就是锁住了。当资源被分配到了,条件锁打开,进城继续运行。
14、系统对象的 copy 与 mutableCopy 方法
不管是集合类对象