搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
我家小花儿
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
2年功能测试月薪9.5K,100多天自学自动化,跳槽涨薪4k后我的路还很长..._功能测试干两年跳槽,薪资待遇
2
趋动VAICP技术认证全球考试正式上线
3
Java学习笔记21——使用JDBC访问MySQL数据库_java mysql 访问
4
测试工具Hercules_hercules setup utility
5
GitHub入门教程_如何将文件添加到版本库
6
Leetcode Top100题目和答案(面试必备)_leetcode题库
7
java springboot 生成pdf 的方式有哪些_springboot生成pdf
8
KGQA知识图谱问答资料整理(持续更新...)
9
RocketMQ 死信消息_rocketmq如何消费异常写入死信队列
10
kali系统卸载Docker容器_kali卸载docker
当前位置:
article
> 正文
iOS 面试题_ios 面试题
作者:我家小花儿 | 2024-08-29 09:13:55
赞
踩
ios 面试题
iOS面试题整理带答案
找工作,面试是避免不了的!
而技术开发面试,问一些技术相关的问题是必须的,最新的技术可能人人都趋之若鹜,但有些原理和基础的也希望都有了解。
这里整理了一些iOS相关的面试题,(可能都已经老掉牙)但是也想跟大家分享下!
如果答案有出入或不准确的地方,也欢迎大家指正。
1.简述OC中内存管理机制。与retain配对使用的方法是dealloc还是release,为什么?需要与alloc配对使用的方法是dealloc还是release,为什么?readwrite,readonly,assign,retain,copy,nonatomic 、atomic、strong、weak属性的作用?
管理机制:使用了一种叫做引用计数的机制来管理内存中的对象。OC中每个对象都对应着他们自己的引用计数,引用计数可以理解为一个整数计数器,当使用alloc方法创建对象的时候,持有计数会自动设置为1。当你向一个对象发送retain消息 时,持有计数数值会增加1。相反,当你像一个对象发送release消息时,持有计数数值会减小1。当对象的持有计数变为0的时候,对象会释放自己所占用的内存。
retain(引用计数加1)->release(引用计数减1)
alloc(申请内存空间)->dealloc(释放内存空间)
readwrite: 表示既有getter,也有setter (默认)
readonly: 表示只有getter,没有setter
nonatomic:不考虑线程安全
atomic:线程操作安全 (默认)
线程安全情况下的setter和getter:
- (NSString*) value {
@synchronized(self) {
return [[_value retain] autorelease];
}}
(void) setValue:(NSString*)aValue {
@synchronized(self) {
[aValue retain];
[_value release];
_value = aValue;
} }
retain: release旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为1
assign: 简单赋值,不更改索引计数 (默认)
copy: 其实是建立了一个相同的对象,地址不同(retain:指针拷贝 copy:内容拷贝)
strong:(ARC下的)和(MRC)retain一样 (默认)
weak:(ARC下的)和(MRC)assign一样, weak当指向的内存释放掉后自动nil化,防止野指针
unsafe_unretained 声明一个弱应用,但是不会自动nil化,也就是说,如果所指向的内存区域被释放了,这个指针就是一个野指针了。 autoreleasing 用来修饰一个函数的参数,这个参数会在函数返回的时候被自动释放。
2.类变量的@protected ,@private,@public,@package,声明各有什么含义?
@private:作用范围只能在自身类
@protected:作用范围在自身类和继承自己的子类 (默认)
@public:作用范围最大,可以在任何地方被访问。
@package:这个类型最常用于框架类的实例变量,同一包内能用,跨包就不能访问
3.线程是什么?进程是什么?二者有什么区别和联系?
一个程序至少有一个进程,一个进程至少有一个线程:
进程:一个程序的一次运行,在执行过程中拥有独立的内存单元,而多个线程共享一块内存
线程:线程是指进程内的一个执行单元。
联系:线程是进程的基本组成单位
区别:(1)调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位 (2)并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行 (3)拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源. (4)系统开销:在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销。
举例说明:操作系统有多个软件在运行(QQ、office、音乐等),这些都是一个个进程,而每个进程里又有好多线程(比如QQ,你可以同时聊天,发送文件等)
4.谈谈你对多线程开发的理解?ios中有几种实现多线程的方法?
好处:
1.使用线程可以把占据时间长的程序中的任务放到后台去处理
2.用户界面可以更加吸引人,这样比如用户点击了一个按钮去触发某些事件的处理,可以弹出一个进度条来显示处理的进度
3.程序的运行速度可能加快
4·在一些等待的任务实现上如用户输入、文件读写和网络收发数据等,线程就比较有用了。
缺点:
1.如果有大量的线程,会影响性能,因为操作系统需要在它们之间切换。
2.更多的线程需要更多的内存空间。
3.线程的中止需要考虑其对程序运行的影响。
4.通常块模型数据是在多个线程间共享的,需要防止线程死锁情况的发生。
实现多线程的方法:
NSObject类方法
NSThread
NSOperation
GCD
5.线程同步和异步的区别?IOS中如何实现多线程的同步?
异步:举个简单的例子 就是游戏,游戏会有图像和背景音乐
同步:是指一个线程要等待上一个线程执行完之后才开始执行当前的线程,上厕所
NSOperationQueue:maxcurrentcount
NSConditionLock
GCD->
http://blog.csdn.net/onlyou930/article/details/8225906 <br />
6.假设有一个字符串aabcad,请写一段程序,去掉字符串中不相邻的重复字符串,即上述字符串处理之后的输出结果为:aabcd
NSMutableString * str = [[NSMutableString alloc]initWithFormat;@“aabcad”];
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{
[str deleteCharactersInRange:NSMakeRange(j, 1)];
}
}
}
}
NSLog(@“%@”,str);
7.获取一台设备唯一标识的方法有哪些?
http://www.cnblogs.com/max5945/archive/2013/06/24/3152292.html<br />
(1)UDID
(2)UUID
(3)MAC Address
(4)OPEN UDID
(5)广告标识符
(6)Vindor标示符
*ios7以后使用keychain
8.iOS类是否可以多继承?如果没有,那可以用其他方法实现吗?简述实现过程。
不可以多继承 用protocol实现
9.堆和栈的区别?
堆需要用户手动释放内存,而栈则是编译器自动释放内存
问题扩展:要知道OC中NSString的内存存储方式
10.iOS本地数据存储都有哪几种方式?
NSKeyedArchiver
NSUserDefaults
Write写入方式
SQLite3
http://blog.csdn.net/tianyitianyi1/article/details/7713103<br />
(问题扩展:什么情况下使用什么样的数据存储)
1.NSKeyedArchiver:采用归档的形式来保存数据,数据对象需要遵守NSCoding协议,对象对应的类必须提供encodeWithCoder:和initWithCoder:方法。缺点:只能一次性归档保存以及一次性解压。所以只能针对小量数据,对数据操作比较笨拙,如果想改动数据的某一小部分,需要解压或归档整个数据。
2.NSUserDefaults:用来保存应用程序设置和属性、用户保存的数据。用户再次打开程序或开机后这些数据仍然存在。NSUserDefaults可以存储的数据类型包括:NSData、NSString、NSNumber、NSDate、NSArray、NSDictionary。缺点:如果要存储其他类型,需要转换为前面的类型,才能用NSUserDefaults存储。
3.Write写入方式:永久保存在磁盘中。第一步:获得文件即将保存的路径:第二步:生成在该路径下的文件:第三步:往文件中写入数据:最后:从文件中读出数据:
4. SQLite:采用SQLite数据库来存储数据。SQLite作为一中小型数据库,应用ios中,跟前三种保存方式相比,相对比较复杂一些。
11.写出方法获取iOS内存使用情况。
http://blog.sina.com.cn/s/blog_698415f20100yjlo.html<br />
// 获取当前设备可用内存及所占内存的头文件
#import <sys/sysctl.h>
#import <mach/mach.h>
// 获取当前设备可用内存(单位:MB)
- (double)availableMemory
{
vm_statistics_data_t vmStats;
mach_msg_type_number_t infoCount = HOST_VM_INFO_COUNT;
kern_return_t kernReturn = host_statistics(mach_host_self(),
HOST_VM_INFO,
(host_info_t)&vmStats,
&infoCount);
if (kernReturn != KERN_SUCCESS) {
return NSNotFound;
}
return ((vm_page_size *vmStats.free_count) / 1024.0) / 1024.0;
}
// 获取当前任务所占用的内存(单位:MB)
- (double)usedMemory
{
task_basic_info_data_t taskInfo;
mach_msg_type_number_t infoCount = TASK_BASIC_INFO_COUNT;
kern_return_t kernReturn = task_info(mach_task_self(),
TASK_BASIC_INFO,
(task_info_t)&taskInfo,
&infoCount);
if (kernReturn != KERN_SUCCESS
) {
return NSNotFound;
}
return taskInfo.resident_size / 1024.0 / 1024.0;
}
(问题扩展:如何利用Xcode观察内存使用情况)
12.深拷贝和浅拷贝的理解?
http://blog.sina.com.cn/s/blog_7b9d64af01019jq8.html<br />
http://blog.sina.com.cn/s/blog_7b9d64af01019k6n.html<br />
对实例进行深拷贝时当前类需要实现NSCopying协议。
浅拷贝是复制出来一个跟原对象相同地址的对象
深拷贝时复制一个跟源对象不同地址的对象 改变源对象对新对象没有影响
13.怎样实现一个singleton的类。
http://blog.csdn.net/zhugq_1988/article/details/8568033<br />
问题扩展:单例的好处是什么?
节省内存
14.什么是安全释放?
置nil 再释放
15.RunLoop是什么?
http://blog.csdn.net/jjunjoe/article/details/8313016<br />
16.什么是序列化和反序列化,可以用来做什么?如何在OC中实现复杂对象的存储?
http://blog.csdn.net/zjl201309/article/details/12707979<br />
序列化是把对象转化成字节序列的过程 反序列化是把字节序列恢复成对象
将对象写到文件或者数据库里,并且能读取出来
遵循NSCoding协议 实现复杂对象的存储 实现该协议后可以对其进行打包或解包,转化成NSData
17.写一个标准宏MIN,这个宏输入两个参数并返回较小的一个?
#define MIN(X,Y) ((X)>(Y)?(Y):(X))
扩展:在定义宏的时候需要注意哪些问题?
宏全部大写 写在#import 下 @interface上 结尾无分号
18.iphone os有没有垃圾回收机制?简单阐述一下OC内存管理。
iphone os没有垃圾回收机制 oc的内存管理是谁创建谁释放 程序中遇到retain 该对象引用计数+1 遇release该对象引用计数-1 retainCount为0时 内存释放
19.简述应用程序按Home键进入后台时的生命周期,以及从后台回到前台时的生命周期?
http://blog.csdn.net/totogo2010/article/details/8048652<br />
自己可以写个demo来测试一下
进入后台时
-(void)applicationWillResignActive:(UIApplication *)application;
-(void)applicationDidEnterBackground:(UIApplication *)application;
进入前台时
-(void)applicationDidEnterForeground:(UIApplication *)application;
-(void)applicationWillResignActive:(UIApplication *)application;
20.ViewController 的 alloc,loadView, viewDidLoad,viewWillAppear,viewDidUnload,dealloc、init分别是在什么时候调用的?在自定义ViewController的时候这几个函数里面应该做什么工作?
http://www.xuebuyuan.com/672935.html<br />
自己写代码测试加深理解
alloc申请内存时调用
loadView加载视图时调用
ViewDidLoad视图已经加载后调用
ViewWillAppear视图将要出现时调用
ViewDidUnload视图已经加载但没有加载出来调用
dealloc销毁该视图时调用
init视图初始化时调用
21.描述应用程序的启动顺序。
1. 程序入口main函数创建UIApplication实例和UIApplication代理实例。
2. 在UIApplication代理实例中重写启动方法,设置第一ViewController。
3. 在第一ViewController中添加控件,实现应用程序界面。
22.为什么很多内置类如UITableViewControl的delegate属性都是assign而不是retain?请举例说明。
防止循环引用
23.使用UITableView时候必须要实现的几种方法?
-(NSInteger)tableView:(UITableView*)tableViewNumberOfRowsInSection:(NSInteger)section; 这个方法返回每个分段的行数,不同分段返回不同的行数可以用switch来做,如果是单个列表就直接返回单个你想要的函数即可。 -(UITableViewCell*)tableView:(UITableView*)tableViewCellForRowAtIndexPath:(NSIndexPath)indexPath; 这个方法是返回我们调用的每一个单元格。通过我们索引的路径的section和row来确定
24.写一个便利构造器。
//id代表任意类型指针,这里代表Student *,类方法
+(id)studentWithName:(NSString *)newName andAge:(int)newAge { Student *stu=[[Student alloc]initName:newName andAge:newAge]; return [stu autorelease];//自动释放 }
25.UIImage初始化一张图片有几种方法?简述各自的优缺点。
http://blog.sina.com.cn/s/blog_a843a8850101flo3.html<br />
3种
imageNamed:系统会先检查系统缓存中是否有该名字的Image,如果有的话,则直接返回,如果没有,则先加载图像到缓存,然后再返回。
initWithContentsOfFile:系统不会检查系统缓存,而直接从文件系统中加载并返回。
imageWithCGImage:scale:orientation当scale=1
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/我家小花儿/article/detail/1022123
推荐阅读
article
【
学习
笔记】
layui
实现
分页
(加模糊
查询
)
_
layui
查询
分页
...
本文介绍了如何使用
layui
实现
数据
分页
展示,包括在PageHelper类中设置初始值,DBUtil的
分页
查询
核心代码,...
赞
踩
article
ChatGPT
3.5
/
4.0
新手
使用
手册(详细版)_chatgpt
3.5
怎么
使用
...
ChatGPT
是由 OpenAI 开发的先进人工智能语言模型,能够理解并生成自然语言文本。它可以帮助你进行写作、回答问题...
赞
踩
article
设计模式
原则
SOLID_
设计模式
solid...
设计模式
五大
原则
:单一职责
原则
SRP告诉我们实现类要职责单一;里氏替换
原则
LSP告诉我们不要破坏继承体系;依赖倒置
原则
D...
赞
踩
article
IOS
分类
结合
RunTime
实例_
ios
种
runtime
在
分类
总的
使用
...
C本身是一个静态语言,数据类型和代码运行的结果都是
在
编译的时候确定的。而Objective-C的
runtime
机制赋予了...
赞
踩
article
Objective
-C中
的
MVC
架构:构建清晰、可维护
的
iOS
应用
...
Model(模型):代表
应用
的
数据结构和业务逻辑。View(视图):负责显示数据(模型)
的
界面元素。Controller...
赞
踩
article
微
服务
架构
与
Spring
Cloud
:设计与治理_
springcloud
微
服务
架构
...
单体
架构
是将所有业务功能集中在一个项目中,最终打包成一个可部署单元。这种方式的优点在于
架构
简单,部署成本低。然而,它的缺...
赞
踩
article
4.
2
存储器
读写
指令
的
发射与
执行
2
_
指令
发射 等待依赖寄存器...
本文详细探讨了x86处理器中F(reg, mem)和F(mem, reg)两类
存储器
指令
的
执行
过程,特别是Opteron...
赞
踩
article
printf
(
"
%
02
X
"
,
0x123
)_16进制
打印
0x%
02
...
X 表示以十六进制形式输出
02
表示不足两位,前面补0输出;出过两位,不影响举例:
printf
(
"
%
02
X
"
, 0x12...
赞
踩
article
django
数据库
查询方法
(管理器调用方法)_
model
.
objects
.
filter
...
len([i.id for i in alarms_query_set])进行计数)(
数据库
一般不删除数据而是把is_d...
赞
踩
article
HOW -
Canvas
入门系列之基于
vue
-
konva
的
多维
表格
(四)_
vue
konva
...
今天我们将将基于
vue
-
konva
实现
的
一个
表格
渲染
的
组件。_
vue
konva
vue
konva
...
赞
踩
article
Javascript
学习笔记(详)(五)——
DOM
拓展与
事件
_
button
document
.get...
这篇博客详细介绍了JavaScript中的
DOM
扩展,包括选择符API、元素遍历和类相关的扩充。同时,重点讲解了
事件
处理...
赞
踩
article
【小迪安全学习笔记】
WEB
漏洞-
注入
类型
及提交
注入
_
x-
oss
注入
...
本文详细介绍了
WEB
漏洞中的
注入
类型
,包括参数字符型、POST数据、COOKIE数据、HTTP头部参数和JSON数据的注...
赞
踩
article
ARM汇编
指令
_字
对齐
最低
两位
...
问题:没有说清楚arm读取
指令
字
对齐
最低
两位
是零问题.参考:arm读取
指令
字
对齐
最低
两位
是零ldr和mov的区别参考: ...
赞
踩
article
java
中对内存中的
List
集合进行
模糊
查询
与分页的一种方式_
java
list
模糊
查询
...
之前有个数据存在redis里,获取的时候直接给所有,现在需要优化,故加上对
查询
条件和分页的支持。_
java
list
模糊
...
赞
踩
article
GORM
中
事务
的使用
_
gorm
事务
...
事务
| 教程 |《
GORM
中文文档 v2》| Go 技术论坛禁用默认
事务
为了确保数据一致性,
GORM
会在
事务
里执...
赞
踩
article
VLDB
2024
即
将
来袭!
创邻
科技
将
带来精彩
分享
...
8月26日-8月28日,
创邻
科技
和你在
VLDB
2024
相见!_vldbvldb ...
赞
踩
article
iOS
面试题
...
点击上方“iOS开发”,选择“置顶公众号”关键时刻,第一时间送达!作者:大兵布莱恩特链接:https://www.jia...
赞
踩
article
计算机
视觉
-
实验
三(
图像
映射
与
全景
拼接
)_
计算机
视觉
实验
中南...
本文详细介绍了
全景
拼接
的基本流程,包括
图像
映射
的各个步骤,如特征匹配、变换结构计算、单应性变换、RANSAC求解单应矩阵...
赞
踩
article
java
-
web
项目
的
分页
与
联合
模糊
查询
(不使用
分页
框架)_
web
项目
组合和
模糊
查询
一样吗...
本文介绍了一个不使用
分页
框架的Java Web
项目
中,如何进行
分页
和
联合
模糊
查询
。通过DTO类、jsp页面、contro...
赞
踩
article
启动
Application
报错:no
mapping
for
GET
/(已解决)...
no
mapping
for
GET
/因为我使用的是框架嘛,然后生成了一个SpringBoot项目后,resource...
赞
踩
相关标签
chatgpt
人工智能
AI写作
设计模式
设计原则
设计
原则
开发语言
架构
微服务
spring cloud
spring
java
02X
django
数据库
python
vue.js
前端
javascript
js
spring boot
后端