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

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

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

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

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

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

7> atomic:原子性,线程安全,set方法的实现加锁。

8> strong:强指针引用的对象,系统不会自动释放

9> weak:弱指针引用的对象,系统会立即释放

ARC中的@property参数使用小结:

1> 控件用weak 相当于MRC的assign

2> 属性对象用strong(如:NSArray *DataList)相当于MRC的retain

3> 非对象类型用assign 相当于MRC的assign

4> 字符串NSString用copy 相当于MRC的copy

strong和copy的区别:

ARC下copy在苹果的默认实现全是浅拷贝(除了对可变对象的copy) ,现在的strong和copy没有区别(不可变对象)。

使用strong,则与可变对象指向同一块内存区域,可变对象的内容改变,其赋值对象也跟着改变,因为两者是同一个指针;

而使用copy,在赋值之前,将可变对象内容复制,创建一个新的内存区域,所以两者不是一个指针地址,可变对象的改变不会导致其赋值对象的改变。深拷贝不变,浅拷贝变。

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声明的变量有运行时特性。id声明的变量能指向任何OC对象

5.2 instancetype & id

1> instancetype在类型表示上,跟id一样,可以表示任何对象类型

2> instancetype只能用在返回值类型上,不能像id一样用在参数类型上

3> instancetype比id多一个好处:编译器会检测instancetype的真实类型

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

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

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

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

4> 如果用ARC,编译器会自动生成管理内存的代码。编译器会自动在适当的地方插入适当的retain、release、autorelease语句。你不再需要担心内存管理,因为编译器为你处理了一切。ARC并不是GC,它只是一种代码静态分析(Static Analyzer)工具。

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

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

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

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

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

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

2. 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笔试题01的更多相关文章

  1. YouKu iOS笔试题一

    序言 最近收到某某同学将去youku的iOS笔试题的邮件,希望笔者能整理一下,并提供参考答案.笔者决定整理出来,并分享给大家.当然,与此同时,也想看看youku的笔试题到底有多难,也考考自己有多少料吧 ...

  2. 一份中规中矩的 iOS笔试题

    一.背景 因为一些原因,我从公司离职,在此之前,我需要帮忙招聘一个新人来做我的工作,于是就有了这篇文章. 由于公司项目16年就已经上线了,前同事写的项目中,有用xib.storyBoard.代码自动布 ...

  3. 2016年iOS笔试题

    收集了一些ios面试的一些基础的试题,其中也有一些较难的 1.请简述UIView与CALayer有什么不同.2.Block什么情况下会保留实体内引用到外部对象,什么时候要用__block或__weak ...

  4. ios笔试题(选择题)

    1-10 C语言 & 计算机基础 1.请看下面一段代码 static int a = 1; int main(){ int b = 2; char *c = NULL; c = (char * ...

  5. ios笔试题

    最近找工作,有面试有笔试部分,故把笔试题自己整理了下. 面试能力要求:精通iphone的UI开发,能熟练操作复杂表视图,熟练使用图层技术, 可以自定义UI控件,使用类别扩展系统控件功能;   擅长通讯 ...

  6. iOS笔试题04

    1. Object-C有多继承吗?没有的话用什么代替?
 1> OC是单继承,没有多继承 2> 有时可以用分类category和协议protocol来代替多继承 2. Object-C有私 ...

  7. iOS笔试题02

    1. Difference between shallow copy and deep copy? 1> 浅拷贝:指针(地址)拷贝,不会产生新对象 2> 深拷贝:内容拷贝,会产生新对象 2 ...

  8. 面试中遇到的iOS笔试题

    1.浅复制和深复制的区别? 2.类别的作用(category)?继承和类别在实现有何区别? 3.类别(category)和类扩展(extension)的区别. 4.obc中的协议和java中的接口概念 ...

  9. iOS面试题01

    1.#import和#include.@class有什么区别?#import<>和#import“”又有什么区别? 答:1.#import和#include都能完整地包含某个文件的内容,# ...

随机推荐

  1. Python爬虫:requests 库详解,cookie操作与实战

    原文 第三方库 requests是基于urllib编写的.比urllib库强大,非常适合爬虫的编写. 安装: pip install requests 简单的爬百度首页的例子: response.te ...

  2. vim基本配置

    #set nocompatible # 打开语法高亮 syntax on # 在底部显示当前模式 set showmode # 命令模式下显示键入的指令 set showcmd # 支持使用鼠标 se ...

  3. 最短路--Bellman-Ford

    Bellman-Ford 贝尔曼-福特 算法思想 贝尔曼-福特算法(英语:Bellman–Ford algorithm),求解单源最短路径问题的一种算法,由理查德·贝尔曼 和 莱斯特·福特 创立的.它 ...

  4. Postgresql pg_dump

    pg_dump 命令详解 参数 描述 -h 指定服务器名称 -p 指定端口 -U 指定要连接的用户名 -w/--no-password 从不提示密码 -W/--password 强制pg_dump在连 ...

  5. PHP的输出语法

    一.echo 只能输出标量数据类型,对于任何数据都可以转为字符串输出 echo是PHP的一种特殊的'指令',不一定要像函数的那样()去使用,可以直接紧跟一个空格输出信息,可以是多个参数 <?ph ...

  6. Bzoj 2301: [HAOI2011]Problem b(莫比乌斯反演+除法分块)

    2301: [HAOI2011]Problem b Time Limit: 50 Sec Memory Limit: 256 MB Description 对于给出的n个询问,每次求有多少个数对(x, ...

  7. ID生成算法(二)

    上一篇文章介绍了一种用雪花算法生成GUID的方法,下面介绍里外一种生成GUID并导出为.txt文件的方法: 话不多少 show you the code ! <!DOCTYPE html> ...

  8. 已安装gcc编译器,但./configure还是提示找不到编译器(分析)

    1.编译nginx前, ./configure检查提示找不到C编译器 [root@test nginx-]# ./configure checking for OS + Linux -.el7.x86 ...

  9. Redis学习(一) —— 基本使用与原理

    一.数据结构 string Redis字符串是可修改字符串,在内存中以字节数组形式存在. 下面是string在源码中的定义,SDS(Simple Dynamic String) struct SDS& ...

  10. 2018-2019-2 网络对抗技术 20165202 Exp8 Web基础

    博客目录 一.实践内容 Web前端HTML 能正常安装.启停Apache.理解HTML,理解表单,理解GET与POST方法,编写一个含有表单的HTML Web前端javascipt 理解JavaScr ...