iOS面试题

这篇博客主要涵盖了iOS面试中常见的知识点,包括内存管理、类别与拓展、协议、代理、内存泄漏检查、应用程序生命周期、图片加载、数据存储等方面。还讨论了Objective-C中的特性,如@propert、@synthesize、alloc、retain等,以及如何安全释放对象和实现单例模式。此外,还涉及了iOS应用程序的后台运行、网络请求、用户界面组件以及iCloud的使用注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、与alloc对应的方法是dealloc,与retain对应的方法是release(autorelease)


2、@property的作用是申明属性及其特征,@synthesize的作用是自动生成属性的访问器(getter、setter)方法


3、一个对象的dealloc方法在 引用计数(retainCount)降为0 时被调用


4、分类(categories)能够向一个已有的类中添加 方法


5、拓展(extensions)能够在当前类中增加 属性和方法


6、iOS开发者账号中,最多能够添加 100台设备号


7、协议(protocol)可以分为两种,其中以关键字 @optional 申明的协议可以不被实现


8、NSObject 是大多数Objective-C类继承的根类,它没有父类


9、代理(delegate)的作用是让一个对象实现另外一个对象的方法


10、UIViewController的didReceiveMemoryWarning方法在 系统内存不足 是会调用


11、autorelease的作用是延后调用release方法(将对象放入自动释放池)


12、iOS后台运行时在 iOS4.0 系统版本才开始支持


13、在KVC中通用的属性访问器方法是 valueForKey: 和setValue:forKey:


14、关键字nil 在Objective-C中表示 一个空对象


15、#import和#include的区别是 #import可以避免文件被多次调用


16、在oc中不支持 运算符重载,不能在头文件里面申明私有方法


17、在Instruments工具中,用于检查内存泄漏的工具是Leaks


18、在iOS开发环境下,后缀为.a的文件又叫做   静态库




1、在oc中, 类的成员变量默认被申明为@protected


2、iPhone、iPad、iTouch中使用的架构是  arm


3、关于oc++中的异常处理,说法最正确的是:在OC++中,oc的异常处理不能捕获到C++的异常


4、iOS开发中,HTTPS通讯是在  NSURLConnection代理方法里  来保障安全性


5、关于NSURLConnection同步通讯和异步通讯,一般不在主线程中使用同步通讯,因为会引起主线程阻塞


6、UIBUtton的标准类型是UIButtonTypeRoundedRect、UIButtonTypeContactAdd、UIButtonTypeInfoLight


7、在给UIButton设置图片时,为了让图片时应按钮的大小,需要将按钮的contentMode设置为:UIViewContentModeScaleAspectFill


8、UIControl继承于UIView


9、关于应用程序目录在更新、恢复和更新过程的变化,说法正确的是在备份过程中Library/Caches目录会被备份;在应用程序更新过程中,/Documents目录会被保留;在应用程序更新过程中,/Library/Preferences目录会被保留


10、iPhone上,不能被应用程序直接调用的系统程序是 日历


11、下列UIView的方法中,layoutSubView在iOS5.0前后的系统调用机制不同


12、构造UIImage的方法中,占用内存最大的方法是imageNamed


13、NSXMLParser对象不能调用initWithContentsOfFile方法进行构造


14、关于iCloud,说法正确的是可以通过程序,将一个文档保存到用户iCloud里;可以通过程序,将iCloud里只保存一个键值对;不能在模拟器上测试iCloud程序;程序使用iCloud时,只需要使用相应的API即可,不需要额外的配置(这个说法是错误的)


15、应用程序大小超过20MB时,只能通过WiFi从AppStore上下载




1、alloc、retain、copy关键字会引起对象的引用计数(retainCount)加一    init不能引起对象的引用计数加一


2、关于XML和JSON,说法正确的是XML是一种类似HTML的语言,JSON是一种轻量级的数据交换格式;JSON和XML之间可以相互转换


3、关于iOS程序后台运行,说法正确的是程序可以在后台播放音乐;程序可以在后台收集用户位置信息;程序可以在后台运行VOIP服务





1、什么是安全释放   即置nil  再释放


2、单例的好处   节省内存


3、什么是序列化和反序列化,可以用来做什么?如何在OC中实现复杂对象的存储?

序列化是把对象转化成字节序列的过程,反序列化是将字节序列恢复成对象

将对象写到文件或者数据库里,并且能读取出来

遵循NSCoding协议 实现复杂对象的存储 实现该协议后可以对其进行打包或解包,转化成NSData


4、iPhone os有没有垃圾回收机制?简单阐述一下OC内存管理

iPhone os没有垃圾回收机制  OC的内存管理是谁创建谁释放  程序中遇到retain  该对象引用计数+1 遇release该对象引用计数-1  retainCount为时  内存释放


5、简述应用程序按Home键进入后台时的生命周期,以及从后台回到前台时的生命周期?

进入后台时

-(void)applicationWillResignActive:(UIApplication *)application;

-(void)applicationDidEnterBackground:(UIApplication *)application;

进入前台时

-(void)applicationDidEnterForeground:(UIApplication *)application;

-(void)applicationWillResignActive:(UIApplication *)application;


6、ViewController 的alloc、loadView、ViewDidLoad、ViewWillAppear、viewDidUnload、dealloc、init分别是在什么时候调用的?

alloc申请内存时调用

loadView加载视图时调用

ViewDidLoad视图已经加载后调用

viewWillAppear视图将要出现时调用

viewDidUnload视图已经加载但是没有加载出来时调用

dealloc销毁该视图时调用

init视图初始化时调用


7、描述应用程序的启动顺序

程序入口main函数创建UIApplication实例和UIApplication代理实例

在UIAPPlication代理实例中重写启动方法,设置第一个viewController

在第一个viewController中添加控件,实现应用程序界面。


8、为什么很多内置类如UITableViewController的delegate属性都是assign而不是retain

防止循环引用


9、UIImage初始化一张图片有几张方法?

3种

imageNamed:系统会先检查系统缓存中是否有该名字的image,如果有的话,则直接返回,如果没有的话,则先加载图像到缓存,然后再返回。

initWithContentsOfFile:系统不检查系统缓存,而直接从文件系统中加载并返回。

imageWithCGImage:scale:orientation  当scale=1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值