ios-理论知识1

答案默认从上到下 A、B、C、D排序

1、delegate中的property使用以下哪个属性()

assign
retain
copy
strong

选A

一般来说在ARC的环境下我们用delegate的属性都是用weak来修饰的,而MRC中用assign

为什么要用weak,其实就是为了避免循环引用,因为比如说我们在控制器中使用了tableView,如果控制器强引用着tableView,而如果我们设置了tableView的代理是控制器,如果delegate的属性修饰符是strong或者是retain就会造成循环引用。copy也是不可能的因为copy修饰的话相当于做了次copy操作,因为delegate能不能copy我们也不知道。

2、关于Objective-C中属性的说明,以下错误的是()

readwrite是可读可写特性,需要生成getter方法和setter方法
readonly是只读特性,只有getter方法,没有setter方法
assign是赋值属性,setter方法将传入参数赋值给实例变量
retain表示持有特性,copy属性表示拷贝属性,都会建立一个相同的对象
选D

这道题的话copy分为浅拷贝和深拷贝,不一定创建一个相同的对象,而retain的话其实做的就是release旧对象,retain新对象,也就是指针拷贝。

3、下面对category描述不正确的是()

category可以添加新的方法
category可以删除修改之前的方法
将类的实现分散到多个不同文件或多个不同框架中
创建对私有方法的前向引用
选B

类别其实就是为了给现有的类去增加新方法,Category提供比继承更加简单的方式给类做扩展,不需要去创建子类,再去添加新方法,但是不能删除修改之前的方法,就好比你给NSString做了一个分类,你是不可能去修改苹果原来给它定好的方法的。将类的实现分散到多个不同文件或多个不同框架中这样会方便我们管理,方便我们查找对于那个地方做了次类扩展。创建对私有方法的前向引用:如果其他类中的方法未实现,在你访问其他类的私有方法时编译器报错这时使用类别,在Category中声明这些方法(不必提供方法实现),编译器就不会再产生警告,所以说其实在OC中是没有私有方法的,就好比如果一个类中的私有方法,你想去实现它的话,我们就可以在类别的.h文件中去敲出这个方法,然后我们在我们需要使用的类中就可以去调用,编译器不会报错,然后运行也不会,因为OC是动态的去发送消息的。类别还可以向对象添加非正式协议:创建一个NSObject的类别称为“创建一个非正式协议”,因为可以作为任何类的委托对象使用。就好比我们创建了一个NSObject的子类,然后去做它的分类,这样的话我们只需要在我们需要用到的地方去impoat这个分类就可以调用这个分类中定义的方法了,因为NSObject在OC中是所有类的顶级父类。

4、NSRunLoop的以下描述错误的是()

Runloop并不是由系统自动控制的
有3类对象可以被run loop监控:sources,timers,observers
线程是默认启动run loop的
NSTimer可手动添加到新建的NSRunLoop中
选C

Runloop不是由系统自动的控制,最简单粗暴的解释就是在我们开启的有些子线程中我们需要自己进行控制。这里引用几句话:有3类对象可以被run loop监控:sources、timers、observers。当这些对象需要处理的时候,为了接收回调,首先必须通过 CFRunLoopAddSource ,CFRunLoopAddTimer , or CFRunLoopAddObserver 把这些对象放入run loop。 要停止接收它的回调,你也可以稍候通过CFRunLoopRemoveSource从run loop中移除某个对象。

线程并不是默认启动run loop的,准确的说每一个线程都有自己的run loop,主线程是默认开启的,而创建的子线程需要自己手动的去开启

NSTimer可以被默认的添加到当前的NSRunloop中,也可以手动的去添加到自己新创建的NSRunloop中。就不如说NSTimer的 使用 scheduledTimerWithTimeInterval 创建的则是默认加入到当前runloop的,而如果是使用 timerWithTimeInterval和initWithFireDate这个就需要自己去添加了

5、单例类NSNotificationCenter提供信息广播通知,它采用的是观察者模式的通知机制。()

其实通知的底层实现就是KVO,也是通过添加观察者模式来监听的,而KVO只是局限于属性的监听,通知的监听更加的广泛

6、从通讯录数据库查询联系人数据,可通过ABAddressBookCopyArrayOfAllPeople和ABAddressBookCopyPeopleWithName函数获得。

选A

引用: 从通信录数据库查询联系人数据是无法使用SQL语句,只能通过ABAddressBookCopyArrayOfAllPeople和ABAddressBookCopyPeopleWithName函数获得.

ABAddressBookCopyArrayOfAllPeople函数是查询所有的联系人数据。ABAddressBookCopyPeopleWithName函数是通过人名查询通讯录中的联系人,其中的name参数就是查询的前缀关键字。

7、NSURLConnection类的同步请求方法是?

+ sendSynchronousRequest:returningResponse:error:
– initWithRequest:delegate:
– initWithRequest:delegate:startImmediately:
选A

sendSynchronousRequest:returningResponse:error:是发送同步请求(返回NSData数据),而后两个方法都需要去设置代理属性,是异步的方法。

8、genstrings命名的基本语法:genstrings [-a] [-q] [-o] sourcefile

选A

引用: genstrings [-a] [-q] [-o <outputDir>] sourcefile

其中参数:

-a  在存在的文件后面追加内容

-q  关闭多个键/值对的警告

-o  指定输出目录

引用:全称就是generate Localizable.strings是做就是查找文件中的宏,然后自动生成Localizable.strings文件,genstrings -o en.lproj *.m就是扫描当前文件夹下所有.m文件的宏,生成Localizable.strings文件并放到en.lproj文件夹下。

9、下面哪些属于UITableViewDelegate协议的方法?

tableView:cellForRowAtIndexPath:
tableView:numberOfRowsInSection:
tableView:didSelectRowAtIndexPath:
numberOfSectionsInTableView:
选C

很简单,Xcode点进去看看就知道了

10、平铺导航模式是在内容组织上没有层次关系,展示的内容都放置在一个主屏幕上,采用分屏或分页控制器进行导航,可以左右或者上下滑动屏幕查看内容。

选A

平铺导航模式是指内容间没有从属关系,主要涉及的控件UIPageControl和UIScrollView,

引用:平铺导航模式是非常重要的导航模式,一般用于简单的扁平化信息浏览,扁平化信息是指这些信息之间没有从属的层次关系

平铺导航模式有两种:分屏导航和分页导航

屏导航:主要涉及的控件有分屏控件(UIPageControl)和滚动视图(UIScrollView)

分页导航:主要涉及的控件有分屏控件(UIPageViewControl)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值