iOS面试题大全56-65

56.        #import 跟#include、@class有什么区别?#import<> 跟 #import”"又什么区别?

1>   #import和#include都能完整地包含某个文件的内容,#import能防止同一个文件被包含多次

2>   @class仅仅是声明一个类名,并不会包含类的完整声明;@class还能解决循环包含的问题

3>   #import <> 用来包含系统自带的文件,#import “”用来包含自定义的文件

57.        属性readwrite,readonly,assign,retain,copy,nonatomic 各是什么作用,在那种情况下用?

1>   readwrite:同时生成get方法和set方法的声明和实现

2>   readonly:只生成get方法的声明和实现

3>   assign:set方法的实现是直接赋值,用于基本数据类型

4>   retain:set方法的实现是release旧值,retain新值,用于OC对象类型

5>   copy:set方法的实现是release旧值,copy新值,用于NSString、block等类型

6>   nonatomic:非原子性,set方法的实现不加锁(比atomic性能高)

58.        写一个setter方法用于完成@property (nonatomic,retain)NSString *name,写一个setter方法用于完成@property(nonatomic,copy)NSString *name.

1>   @property (nonatomic, retain) NSString *name;

- (void)setName:(NSString *)name

{

if (_name != name) {

[_name release];

_name = [name retain];

}

}

2>   @property(nonatomic, copy) NSString *name;

- (void)setName:(NSString *)name

{

if (_name != name) {

[_name release];

_name = [name copy];

}

}

59.        对于语句NSString*obj = [[NSData alloc] init]; ,编译时和运行时obj分别是什么类型?

1>    编译时是NSString类型

2>    运行时是NSData类型

60.        常见的object-c的数据类型有那些, 和C的基本数据类型有什么区别?

1>    常用OC类型:NSString、NSArray、NSDictionary、NSData、NSNumber等

2>    OC对象需要手动管理内存,C的基本数据类型不需要管理内存

61.        id 声明的变量有什么特性?

id声明的变量能指向任何OC对象

62.        Objective-C如何对内存管理的,说说你的看法和解决方法?

1>    每个对象都有一个引用计数器,每个新对象的计数器是1,当对象的计数器减为0时,就会被销毁

2>    通过retain可以让对象的计数器+1、release可以让对象的计数器-1

3>    还可以通过autorelease pool管理内存

4>    如果用ARC,编译器会自动生成管理内存的代码

63.        内存管理的几条原则时什么?按照默认法则.哪些方法生成的对象需要手动释放?在和property结合的时候怎样有效的避免内存泄露?

1>    只要调用了alloc、copy、new方法产生了一个新对象,都必须在最后调用一次release或者autorelease

2>    只要调用了retain,都必须在最后调用一次release或者autorelease

3>    @property如果用了copy或者retian,就需要对不再使用的属性做一次release操作

4>    如果用了ARC,另外讨论

64.        看下面的程序,三次NSLog会输出什么?为什么?

NSMutableArray* ary = [[NSMutableArray array] retain];

NSString *str = [NSString stringWithFormat:@"test"];  // 1

[str retain];   // 2

[ary addObject:str]; // 3

NSLog(@"%d", [str retainCount]);

[str retain];  // 4

[str release];   // 3

[str release];   // 2

NSLog(@"%d", [str retainCount]);

[ary removeAllObjects]; // 1

NSLog(@"%d", [str retainCount]);

结果:3、2、1

65.    OC中创建线程的方法是什么?如果指定在主线程中执行代码?如何延时执行代码?

1>    创建线程的方法

  • NSThread
  • NSOperationQueue和NSOperation
  • GCD

2>    主线程中执行代码

  • [self performSelectorOnMainThread: withObject: waitUntilDone:];
  • [self performSelector: onThread:[NSThread mainThread] withObject: waitUntilDone:];
  • dispatch_async(dispatch_get_main_queue(), ^{

});

3>    延时执行

  • double delayInSeconds = 2.0;

dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW,

(int64_t)(delayInSeconds * NSEC_PER_SEC));

dispatch_after(popTime, dispatch_get_main_queue(), ^(void){

});

  • [self performSelector: withObject: afterDelay:];
  • [NSTimer scheduledTimerWithTimeInterval: target: selector: userInfo: repeats:];
时间: 2024-10-12 07:47:57

iOS面试题大全56-65的相关文章

ios面试题大全

1.写一个NSString类的实现 + (id)initWithCString:(c*****t char *)nullTerminatedCString encoding:(NSStringEncoding)encoding; + (id) stringWithCString: (c*****t char*)nullTerminatedCString encoding: (NSStringEncoding)encoding { NSString  *obj; obj = [self alloc

IOS-5-面试题2:黑马程序员IOS面试题大全

五.UI控件 1. 怎么解决缓存池满的问题(cell) ios中不存在缓存池满的情况,因为通常我们ios中开发,对象都是在需要的时候才会创建,有种常用的说话叫做懒加载,还有在UITableView中一般只会创建刚开始出现在屏幕中的cell,之后都是从缓存池里取,不会在创建新对象.缓存池里最多也就一两个对象,缓存池满的这种情况一般在开发java中比较常见,java中一般把最近最少使用的对象先释放. 2. CAAnimation的层级结构 3. UIButton与UITableView的层级结构 1

IOS-4-面试题1:黑马程序猿IOS面试题大全

一.多线程网络 1. 多线程的底层实现? 1> 首先搞清楚什么是线程.什么是多线程 2> Mach是第一个以多线程方式处理任务的系统.因此多线程的底层实现机制是基于Mach的线程 3> 开发中非常少用Mach级的线程,由于Mach级的线程没有提供多线程的基本特征,线程之间是独立的 4> 开发中实现多线程的方案 l C语言的POSIX接口:#include <pthread.h> l OC的NSThread l C语言的GCD接口(性能最好.代码更精简) l OC的NSO

iOS面试题大全66-85

警告:一定要把英文题目过一遍,有些公司的题目故意弄成英文的!!! 66.        Difference between shallow copy and deep copy? 1>    浅拷贝:指针(地址)拷贝,不会产生新对象 2>    深拷贝:内容拷贝,会产生新对象 67.        What is advantage of categories? What is difference between implementing a category and inheritanc

iOS面试题大全1-24

1.风格纠错题 2. 什么情况使用 weak 关键字,相比 assign 有什么不同? 什么情况使用 weak 关键字? 在 ARC 中,在有可能出现循环引用的时候,往往要通过让其中一端使用 weak 来解决,比如: delegate 代理属性 自身已经对它进行一次强引用,没有必要再强引用一次,此时也会使用 weak,自定义 IBOutlet 控件属性一般也使用 weak:当然,也可以使用strong.在下文也有论述:<IBOutlet连出来的视图属性为什么可以被设置成weak?> 不同点:

iOS面试题大全25-55

25. _objc_msgForward函数是做什么的,直接调用它将会发生什么? _objc_msgForward是 IMP 类型,用于消息转发的:当向一个对象发送一条消息,但它并没有实现的时候,_objc_msgForward会尝试做消息转发. 我们可以这样创建一个_objc_msgForward对象: IMP msgForwardIMP = _objc_msgForward; 在上篇中的<objc中向一个对象发送消息[obj foo]和objc_msgSend()函数之间有什么关系?>曾提

IOS-4-面试题1:黑马程序员IOS面试题大全

一.多线程网络 1. 多线程的底层实现? 1> 首先搞清楚什么是线程.什么是多线程 2> Mach是第一个以多线程方式处理任务的系统,因此多线程的底层实现机制是基于Mach的线程 3> 开发中很少用Mach级的线程,因为Mach级的线程没有提供多线程的基本特征,线程之间是独立的 4> 开发中实现多线程的方案 l C语言的POSIX接口:#include <pthread.h> l OC的NSThread l C语言的GCD接口(性能最好,代码更精简) l OC的NSOp

iOS面试题系列之Objective-C相关

1.简述你项目中常用的设计模式.它们有什么优缺点? 常用的设计模式有:代理.观察者.单例. (1)单例:它是用来限制一个类只能创建一个对象.这个对象中的属性可以存储全局共享的数据.所有的类都能访问.设置此单例中的属性数据. 优点:是它只会创建一个对象容易供外界访问,节约性能. 缺点:是一个类只有一个对象,可能造成责任过重,在一定程度上违背了"单一职责原则".单例模式中没有抽象层,所以单例类的扩展有很大的困难.不能过多创建单例,因为单例从创建到程序关闭前会一直存在,过多的单例会影响性能,

java程序员面试题大全含答案(2018--2019)

java程序员面试题大全含答案(2018--2019) 1.10道经典java面试题_实习生必问! 2.15个Java线程并发面试题和答案 3.15个高级Java多线程面试题及回答 4.2018年java分布式相关最新面试题 5.2018最新java技术面试题与答案 6.4个Spring常见面试题及答案解析 7.css面试题及答案 8.HR常问面试题总结(上) 9.HR常问面试题总结(下) 10.html面试题及答案 11.java中String类的面试题大全含答案 12.java二叉树算法面试