面试笔试精华(一)

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

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

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

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

2.        属性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性能高)

3.        写一个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];

}

}

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

1>   编译时是NSString类型

2>   运行时是NSData类型

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

9.        看下面的程序,三次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

10.     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:];
 

iOS开发——面试笔试精华(一)的更多相关文章

  1. iOS开发——面试笔试精华(四)

    面试笔试精华(四) 1.        Object-C有多继承吗?没有的话用什么代替?
 1>  OC是单继承,没有多继承 2>  有时可以用分类和协议来代替多继承 2.        ...

  2. iOS开发——面试笔试精华(二)

    面试笔试精华(二) 警告:一定要把英文题目过一遍,有些公司的题目故意弄成英文的!!! 1.        Difference between shallow copy and deep copy? ...

  3. iOS开发——面试笔试精华(三)

    面试笔试精华(三) 1.        When to use NSMutableArray and when to use NSArray? 什么时候使用NSMutableArray,什么时候使用N ...

  4. iOS开发——面试指导

    iOS面试指导 一 经过本人最近的面试和对面试资料的一些汇总,准备记录这些面试题,以便ios开发工程师找工作复习之用,本人希望有面试经验的同学能和我同时完成这个模块,先出面试题,然后会放出答案. 1. ...

  5. ios开发——面试篇C语言精华

    面试篇C语言精华    1.面向过程:分析解决问题所需要的步骤,然后用函数把这些步骤一步一步实 现. 面向对象:直接描述客观世界的对象及其相互关系.现实世界中任何实体都 可以看作是对象,对象之间通过消 ...

  6. ios开发——面试篇(一)

    面试篇之内存管理与多线程 简述OC中内存管理机制.­­­­­与retain配对使用的方法是dealloc还是release,为什么?需要与alloc配对使用的方法是dealloc还是release,为 ...

  7. iOS开发——面试总结(一)

    面试总结(一) 通过网络搜寻和自己总结经历找了一些IOS面试经常被问道的问题: 1.搞清楚touch事件的传递(事件的响应链) 事件的响应(responder chain) 只有继承了UIRespon ...

  8. 面试总结:鹅厂Linux后台开发面试笔试C++知识点参考笔记

    文章每周持续更新,各位的「三连」是对我最大的肯定.可以微信搜索公众号「 后端技术学堂 」第一时间阅读(一般比博客早更新一到两篇) 文章是由自己笔试面试腾讯的笔记整理而来,整理的时候又回顾了一遍,中间工 ...

  9. iOS开发--面试

    今天一大清早去面试, 公司距离我家还挺近的, 花了一个小时走着去, 也顺路印下简历, 理理思路, 到了公司面试官什么的都不错, 还给我讲了很多知识, 收货也是满满的, 总结下今天都遇到了哪些问题, 调 ...

随机推荐

  1. ZJOI2008泡泡堂BNB

    1034: [ZJOI2008]泡泡堂BNB Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1305  Solved: 676[Submit][Sta ...

  2. php对提交数据的验证

    <?php //security.php /** * @author zhengwei * @copyright 2007 */ /* 函数名称:inject_check() 函数作用:检测提交 ...

  3. shell脚本编写笔记

    包含转载内容,转载自http://wenku.baidu.com/link?url=jtCHxEYzgGve6P64U3JRQRgU6nhpGvqFLLpWu9I2Htq6hi9TGLudRFkk7r ...

  4. Android开发优化宝典

    I. 网络相关 http头信息带Cache-Control域 确定缓存过期时间 防止重复请求 直接用IP直连,不用域名,策略性跟新本地IP列表. – DNS解析过程耗时在百毫秒左右,并且还有可能存在D ...

  5. 【转】Tomcat配置文件入门

    Tomcat 基本配置 tomcat读取配置文件 首先简单说一下tomcat是如何读取配置文件的.tomcat在启动时,首先找系统变量CATALINA_BASE,如果没有,则找CATALINA_HOM ...

  6. POI 操作(新接口)

    POI 生成XLS实例 转载至:http://www.4ucode.com/Study/Topic/697242 ackage test; import java.io.FileOutputStrea ...

  7. HDU 2295 Radar dancing links 重复覆盖

    就是dancing links 求最小支配集,重复覆盖 精确覆盖时:每次缓存数据的时候,既删除行又删除列(这里的删除列,只是删除表头) 重复覆盖的时候:只删除列,因为可以重复覆盖 然后重复覆盖有一个估 ...

  8. 单元测试之获取Spring下所有Bean

    单元测试中,针对接口的测试是必须的,但是如何非常方便的获取Spring注册的Bean呢? 如果可以获取所有的Bean,这样就可以将这个方法放到基类中,方便后面所有单元测试类的使用,具体实现如下: im ...

  9. GTK+布局管理

    GTK+布局管理 GTK+ 布局管理 在本章中,我们将讲述如何将构件布置在窗口与对话框中. 当我们在设计应用程序的图形界面时,我们首先要决定的是在程序中用到哪种构件和管理应用程序中的这些构件.为了方便 ...

  10. uva 11019 Matrix Matcher

    题意:给出一个n*m的字符矩阵T,你的任务是找出给定的x*y的字符矩阵P在T中出现了多少次. 思路:要想整个矩阵匹配,至少各行都得匹配.所以先把P的每行看做一个模式串构造出AC自动机,然后在T中的各行 ...