iOS开发——面试笔试精华(一)
面试笔试精华(一)
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开发——面试笔试精华(一)的更多相关文章
- iOS开发——面试笔试精华(四)
面试笔试精华(四) 1. Object-C有多继承吗?没有的话用什么代替? 1> OC是单继承,没有多继承 2> 有时可以用分类和协议来代替多继承 2. ...
- iOS开发——面试笔试精华(二)
面试笔试精华(二) 警告:一定要把英文题目过一遍,有些公司的题目故意弄成英文的!!! 1. Difference between shallow copy and deep copy? ...
- iOS开发——面试笔试精华(三)
面试笔试精华(三) 1. When to use NSMutableArray and when to use NSArray? 什么时候使用NSMutableArray,什么时候使用N ...
- iOS开发——面试指导
iOS面试指导 一 经过本人最近的面试和对面试资料的一些汇总,准备记录这些面试题,以便ios开发工程师找工作复习之用,本人希望有面试经验的同学能和我同时完成这个模块,先出面试题,然后会放出答案. 1. ...
- ios开发——面试篇C语言精华
面试篇C语言精华 1.面向过程:分析解决问题所需要的步骤,然后用函数把这些步骤一步一步实 现. 面向对象:直接描述客观世界的对象及其相互关系.现实世界中任何实体都 可以看作是对象,对象之间通过消 ...
- ios开发——面试篇(一)
面试篇之内存管理与多线程 简述OC中内存管理机制.与retain配对使用的方法是dealloc还是release,为什么?需要与alloc配对使用的方法是dealloc还是release,为 ...
- iOS开发——面试总结(一)
面试总结(一) 通过网络搜寻和自己总结经历找了一些IOS面试经常被问道的问题: 1.搞清楚touch事件的传递(事件的响应链) 事件的响应(responder chain) 只有继承了UIRespon ...
- 面试总结:鹅厂Linux后台开发面试笔试C++知识点参考笔记
文章每周持续更新,各位的「三连」是对我最大的肯定.可以微信搜索公众号「 后端技术学堂 」第一时间阅读(一般比博客早更新一到两篇) 文章是由自己笔试面试腾讯的笔记整理而来,整理的时候又回顾了一遍,中间工 ...
- iOS开发--面试
今天一大清早去面试, 公司距离我家还挺近的, 花了一个小时走着去, 也顺路印下简历, 理理思路, 到了公司面试官什么的都不错, 还给我讲了很多知识, 收货也是满满的, 总结下今天都遇到了哪些问题, 调 ...
随机推荐
- bzoj3142
百度空间发公式太累,给个比较详细的解题链接吧http://www.cnblogs.com/jianglangcaijin/archive/2013/08/13/3254314.html注意M(k-1) ...
- poj3041,poj2226
二分匹配的灵活运用 3041还是比较好想的,考虑到横排/竖排射一枪就能搞定这一行/一列的所有点, 我们以行数为点集x,列数为点集y,在目标点(xi,yi)之间连一条边 这样最小射击次数=最小点覆盖(边 ...
- [VC6]ONMESSAGE()宏编译时出现"sytax error ;"错误时
自定义消息时编译出错,经排查,在定义消息的头文件里 #define WM_XXX (WM_USER+1000); 最后多加了一个分号引起. 吐血.
- apache开源项目--PDFBox
PDFBox是Java实现的PDF文档协作类库,提供PDF文档的创建.处理以及文档内容提取功能,也包含了一些命令行实用工具. 主要特性包括: 从PDF提取文本 合并PDF文档 PDF 文档加密与解密 ...
- Ext入门学习系列(四)面板控件
第四章 使用面板 上节学习了Ext复杂对话框,更进一步了解了Ext的运行机制.本章重点来了解Ext所有控件的基础——面板控件. 一.Ext的面板是什么? 同样先来看看几个效果: 基本面板,点击右上角小 ...
- u-boot向linux内核传递启动参数(详细)
U-BOOT 在启动内核时,会向内核传递一些参数.BootLoader 可以通过两种方法传递参数给内核,一种是旧的参数结构方式(parameter_struct),主要是 2.6 之前的内核使用的方式 ...
- JPEG最优压缩参数试验【光影魔术手VS Image Optimizer】
样本数量:100张(1MB-2.6MB)旅游照 样本大小:157MB 156.44 样本尺寸:3M(204 ...
- ie 提示浏览器升级信息 干掉ie
<!--[]> <div id=</a> 或以下浏览器: <a href="http://www.mozillaonline.com/"> ...
- 析构函数释放内存时出现_BLOCK_TYPE_IS_VALID错误
错误信息截图: 原因: 1.内存泄漏:所以当程序退出时,系统会收回分配的内存,于是调析构函数,由于内存已被错误地释放,于是就会出现"Debug Assertion Failed"的 ...
- HW5.34
import java.util.Scanner; public class Solution { public static void main(String[] args) { Scanner i ...