一些常见的ios知识点

1.堆栈的区别
对于栈来讲,是由编译器自动管理的,无需我们手动去控制;
对于堆来讲,是程序员来控制的,容易产生memory leak。
2.数组和链表的区别
数组是将元素在内存中连续存放的,由于没有元素占用的内存相同,可以通过下表迅速访问。
链表中的每个元素在内存中不是顺序存储的,而是通过存在匀速的指针联系在一起的。
3.de'legate 和notification 的区别,和使用的情况
delegate:消息的发送者(sender)和接受者(receiver)一个事件将要发生,delegate同意然后发送响应者事件,delegate机制使得接受者可以改变发送者的行为。通常发送者和接受者的关系是一对多的管理
Notification:消息的发送者告知接受者事件已经发生或者将要发生,仅此而已,接受者不能反过来影响发送者的行为。通常发送者和接受者的关系是间接的多对关系。

4 什么是mvc 为什么要要使用MVC,有什么好处
mvc 是一种设计模式
model 数据模型:用于封装与程序的业务逻辑有关的数据以及对数据的处理方法,有对数据直接的访问权限。
view 实体能够实现数据的目的显示。
controller 控制器起到不同层面的主治作用,用于控制应用程序的流程。

  1. 一个UITableView能否绑定多个数据源
    不呢
  2. 一个UIViewcontroller能否管理多个UItableview
    能够
  3. ios4.5.6 相对于以前的版本添加了那些新特性
    这个就很多了, 比如抛弃了gool地图新推maps应用,大幅加强中国本地化的支持,siri 开口讲普通话,通过icloud体验分享乐趣,Passbook电子票圈的管理,随时随地FacetTime,电话功能郑强,Safari支持全屏浏览,Mail应用新增Vip
    万能辅助器,更强大了。
  4. 同不请求和异步请求的区别
    发送同步请求的时候,程序将停止用户交互,知道服务器返回数据,才能进行下一步操作,异步操作不会阻塞线程,而是会建立一个新的线程来操作,用户发出请求后依然可以实现和用户的操作。
  5. iOS 中的多线程操作,多线程方式
    iOS 中提供了方便的多线程调用机制:NSOperation 和NSOperationQueue 使用方法很简单一般都是讲NSOperation对象加入到NSOperationQueu 队列中,然后在执行,直到任务操作完成
    10 UIViewController的生命周期
    当一个视图控制器被创建,并在屏幕上显示的时候,代码执行的顺序是
    1. alloc 创建对象,分配内存空间。
    2. init 初始化对象,初始化数据
    3. loadView 加载view
    4. viewDidLoad 控件 加载完毕后可以对数据及动态创建其他
      5.viewWillApper 视图加载在屏幕之前,马上这个视图就要显示
      6.viewDidAppear 视图已经在屏幕上渲染完成
      // 视图控制器重屏幕上移除的
    5. vieWillDisappear 视图将被从屏幕移除之前执行
    6. vieDidDISappear 视图已经从屏幕上移除
    7. dealloc 对象进行释放,视图被销毁
    8. viewDidUnload 显示的controller执行,出现内存警告在内存不足的时候调用,并对所有非当前的视图的字视图销毁,来释放内存空间,此时开发者需要手动的对viewLoad,ViewDidLoad 中创建的对象释放内存。因为当这个视图再次显示在屏幕的时候回调用loadView , ViewDidLoad再次调用,一遍再次构造视图。

11 Autorerelease对象什么时候释放
autorelease 实际上是把对release的调用延迟了,对于一个Autorelease 系统只是把该Object 放入了当前的AutoreleasePool中,当该pool被释放的时候该pool中的所有对象会调用Release

12.iOS 数据持久化
属性列表
对象归档
SQLite3
CoreDa'ta
14 . Object -c 的类可以多重继承吗?可以实现多个接口么?Category是什么?重写一个类的方式用继承还是分类好?为什么?
Object中的类不能使用多重继承,可以实现对个接口,通过实现多个接口可以完成c++的多种继承, Category是类别 一般情况用分类好,用Category 去重写的方法,仅对本Category 有效,不会影响到其他类与原有类的关系。
15 #import #include 的区别, @class #import <> 跟#import“” 的 区别

import 是Object_C 导入头文件的关键字,#include 是C /C++ 导入头文件的关键字,使用#import头文件会自动只导入一次,不会重复的导入,相当于#include 和#p'ragme once

@class 告诉编译器一个类的申明,当执行时,才去查看类的实现文件,可以解决头文间的相互包含,

import《》用力来包含系统的头文件,#import 用来包含用户的头文件

16 属性 readwrite , readonly ,assign, retain , copy ,nonatomic 是什么作用在什么情况下使用。

  1. readwrite 是可读可写特性,需要生成getter 方法和setter方法是
    2.readonly 是只读属性,只会生成getter方法,不会生成setter方法。
  2. 不希望属性的内外发生改变,assign是赋值特性,setter方法将传入的参数赋值给实例变量,
  3. retain 仅设置变量的时候,表示持有特性,setter 方法将传入参数先保留,在赋值,传入的参数retaincount 会加1
  4. copy 表示赋值特性,setter方法将传入的对象复制一份,需要完全的一份新的变量的时候,
    6 . nonatomic 非原子操作,决定编译器生成的setter getter 方法是否是原子操作,atomic表示多线程安全,一般用nonatomic

17 在Object-C中数据类型有哪些,和c 的基本类型有什么区别。
Object-c的数据类型有NSString ,NSNumber,NSArray,NMutableArray,NSData这些都是class创建以后都是对象,而c语言的是基本数据类型,只是一定字节的内存空间,用于存放数组,而在object-c 的NSNumber 包含父类NSObject 的 方法和自己的方法可以完成复杂的操作。
18 Object-C如何对内存管理的,说说的你看法和解决方法
Object -C 的内存管理主要有三中方式ARC (自动内存计数),手动管理内存计数,内存池。解决的方法的话是谁持有谁释放。
19 如何都ios设备进行性能测试
Profile -> Instruments ->Time Profiler
20 Object c中创建线程的方法是什么?如何在主线程中执行代码,方法是什么》如何延迟执行代码的方法又是什么?

  1. 创建线程的方法有三种,NSThread 创建,使用GCD的dispatch ,适应NSOPeration然后加入NSOperationQueue中
  2. 在主线程执行代码的方法是 performSelectorOnMainThread;
  3. 如果想延迟执行代码的方法有PerformSelector:onThread:withObject:waitUntilDone;
    21描述一下 iOS SDK中如何实现MVC的开发模式的。
    mvc 是模型-》视图-》控制 开发模式。对于ios的SDK 所有的View都是视图控制图层的,他应独立于模型层,由视图控制层来控制。所有的用户数据都是模型层,它应该独立于视图,说的的ViewController 都是控制层,由它负责控制视图,访问模型数据。
  4. 定义属性的时候,什么情况下使用 copy ,assign,retain?
  5. adding 用于简单的数据类型,如NSInteger,double,bool等。
  6. retain和copy 用于对象,copy 相当于a指向一个对象,b也指向同样的对象时候,如果使用assign a如果释放,在调用b就会crash'
    3.若果使用copy 的方式,a和b各自有自己的内存,就可以解决这个问题。retain 会是计数器加 1 ,也可以解决assign的问题。
    4.atomic 和nonatomic 用来解决编译器生成的getter 和setter是否是原子操作,多线程的环境下,原子操作是必要的,否则可引起错的结果,加了atomic的setter函数变成这样
    if(property != newValue){
    [Property release]
    property = [newValule retain];

}

23 Object -c 有私有方法吗? 私有变量吗?
Object 类里面的方法只有两种,静态的方法和实力方法,所有实例变量都是私有的,所有的实例方法默认都是共有的、
24 .浅拷贝和深拷贝的区别是
浅拷贝:只是复制对象的指针,而不是复制应用对象的本身,深拷贝就是复制应用对象的本身、、、
25.自动释放池是什么,是如何工作的?
当你想一个对象发送autorelease 消息的时候,Cocoa 就会将该对象的一个引用放到罪行的自动释放池,他任然是个正当的对象,因此自动释放池定义的作用域内的其他对象可以向他发送消息。当长须执行到作用域结束的位置,自动释放池就会被释放,池子中的所有对象就会被释放。
26.单件实例是什么?
Foundation 和Application kit 框架中的一些类只允许创建单件对象,这个对象就是在当前进程中的唯一实例。NSFileManger 和NSWorkspace类在使用的时候是基于进程进行的单件对象的实例化。当向这些类请求实例化的时候,他们会想你传递单一的一个引用,如果该实例还不存在,者首先要实例的分配和初始化、
27 。类别的作用?继承和类别在实现中有什么区别
category 可以在不获悉,不改变原来代码的情况下往里面添加新的方法,只能添加不能删除修改。并且如果类别和原来类中的方法产生名冲突,则类别间覆盖原来的方法,应为列别具有更高的优先级。类别中主要有3个作用。

  1. 将类的实现分散到多个不同文件或多个不同的框架中。
    2.创建对私有方法的前向引用。
  2. 向对象添加非正式的协议。继承可以增加,修改或者删除方法,并且可以增加属性。
  3. 类别和扩展的区别
    category 和extensions 的不同在于后者可以添加属性,宁外后者添加的方法是必须要实现的,extensions 可以认为是一个私有的Category。
  4. KVO和KVC
    KVC 键 值编码 是一种简介访问对象的属性,使用字符串来表示属性,而不是日通过调用存取的方法,直接或通过实例变量访问机制。很多情况下可以简化代码。apple。
    KVO键值观察者机制,他提供和了观察一个数次那个变化的方法,极大的简化了代
    [self addObserver:selforKeyPath:@"highlighted" options:0 context:nil]; #pragma mark KVO
    -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)objectchange:(NSDictionary *)change context:(void *)context
    {
    if ([keyPath isEqualToString:@"highlighted"])
    { [self setNeedsDisplay];
    }
    } 对于系统是根据keypath去取的到相应的值发生改变,理论上来说是和kvc机制的道理是一 样的。 对于kvc机制如何通过key寻找到value: “当通过KVC调用对象时,比如:[self valueForKey:@”someKey”]时,程序会自动试图通过 几种不同的方式解析这个调用。首先查找对象是否带有someKey 这个方法,如果没找到, 会继续查找对象是否带有someKey这个实例变量(iVar),如果还没有找到,程序会继续试 图调用 -(id)valueForUndefinedKey:这个方法。如果这个方法还是没有被实现的话,程序会抛出 一个NSUndefinedKeyException异常错误。(cocoachina.com注:Key-Value Coding查找方法的时候,不仅仅会查找someKey这个方法, 还会查找getsomeKey这个方法,前面加一个get,或者_someKey以及_getsomeKey这几种形式。同时,查找实例变量的时候也会不仅仅查找someKey这个变量,也会查找_someKey这个变量是否存在。) 设计valueForUndefinedKey:方法的主要目的是当你使用-(id)valueForKey方法从对象中 请求值时,对象能够在错误发生前,有最后的机会响应这个请求。这样做有很多好处,下面的两个例子说明了这样做的好处。“ 来至cocoa,这个说法应该挺有道理。 因为我们知道button却是存在一个highlighted实例变量.因此为何上面我们只是add一个 相关的keypath就行了,可以按照kvc查找的逻辑理解,就说的过去了。
  5. 代理的作用
    代理的目的是改变或传递控制链,允许一个类在有个特定时刻通知其他类,而不需要获得哪些类的指针。可以减少框架的复杂程度。代理可以理解为jave只能的回调监听机制的一种。
    31 响应者链
    时间的响应链,包括点击时间,画面刷新等。在试图栈内从上倒下,或者从下岛上传播。
    32frame 和bounds的区别
    1.frame 是指 该view在父view坐标系统中的位置和大小(参照点事父类的坐标系统)
  6. bounds 该view 在本省坐标系统中的位置和大小(参照点是自己的坐标系统)
  7. 方法和选择器有什么不同
    selector 是一个方法的名字,method 是一个组合体
    34 ARC自动引用技术
  8. ARC 是编译特性,不是运行时特性,只是在编译的时候,编译器会自动加上释放代码。
  9. 不能使用release、retain autorelease retainCont
  10. dealloc 注意
    不能再dealloc中调用【super dealloc】;
    不能在dealloc 中释放资源。
  11. @property 参数说明
    1.retain 改为strong
    1. 基本类型数据还是用assign
    2. copy 还是用copy
    3. 如果两个对象循环引用,一个用strong 一个用weak
    4. weak 是用在对象上,weak其实作用和assign相当
  12. ARC 中只允许使用通过@autoreleasepool{}创建自动释放池

36.GCD
Grand Central Dispatch 简称GCD 解决多核并运算的一种方法
Grand Central Dispatch
dispatch _queue_t newDispath = dispatch_get _global _queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0);

dispatch_async(newDispath, ^{[self downloadImage]})

deifine DISPATCH_QUEUE_PRIORITY_HIGH 2

define DISPATXH_QUEUE_PRIORITY_DEFALT 0

distatch queue 分为三种
Serial(串行) 有称为private dispatch queues ,当你在同时执行一个任务。
Serial queue 通常用于同步访问特定的资源或数据,当你创建多个serial
queue时,虽然他们各自是同步执行,但Serial queue 与Serialqueue 之间并发执行的。(这个有问题)

Concurrent(并发)又称为global dispatch queue , 可以并发的执行多个任务,但是执行完成的顺序是随机的。
Main dispatch queue 他是他是全局可用的serial queue ,他是在应用程序主线,程序上执行任务。
3.一般GCD 可以如下操作
dispatch_async(dispatch_er_global _queue(DISPATCH_QUEUE_PRIORity_DEFAULT,0)),^{
dispatch_async(dispatch_get_main_queue(),
}
dispatch_group_async可以实现监听一组任务是否完成,完成后得到通知执行其他 的操作。 *这个方法很有用,比如你执行三个下载任务,当三个任务都下载完成后你才通知

37 多线程

1 开多线程
1.NSThread
2.GCD(重点) - Grand central Dispatch

  1. NSOperation
    2.开线程的方式
    NSThread *thread= [NSThread alloc]initWithTarget:self selector:@selector(run) object:nil];
    thread start];

直接启动
【NSThread datachNewThreadSelector:@selector(run) toTatget:self withObject:nil】;
[self perfprmSelectorInbachround:@sekectir(run) WithObject:nil];

2.0 其他用法
NSThread thread = [NSthread CurrentThread];
+(NSThread
)mianThread.
3>线程间的通信
performSwlectorOnMainThread...

2.GCD (重点)
1》队列的类型
*并发队列
获得全局的并发队列:dispatch_get_global_queue
*串行队列
a。自己创建
dispatch_queue_cteate
b.主队列
dispatch_get_main_queue
2>执行任务的方法
*同步 (sync)执行
*异步(async)执行
3>了解队列和方法和配合使用
4》 线程间通信
dispatch _ async()
dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT,0),^{

dispatch_async(dispatch_get_main_queue())^{
}
}
5>其他用法
dispatch_once
dispatch_after
dispatch_group_async 和dispatch - group _notify
3.NSOperation
1> 基本使用
NSInvocationOperation
NSBlockOperation
2>NSOperationQueue
设置最大的并发数
-( void)setMaxConcurrentOperation:(NSInterger)op;
设置依赖
[operationb addDependency:operationA];
3>自己定义Operation的基本流程

4>如何解决网络请求中的图片重复下载的问题。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容

  • 1.堆栈的区别 对于栈来讲,是由编译器自动管理的,无需我们手动去控制; 对于堆来讲,是程序员来控制的,容易产生me...
    Rui哥阅读 212评论 0 0
  • __block和__weak修饰符的区别其实是挺明显的:1.__block不管是ARC还是MRC模式下都可以使用,...
    LZM轮回阅读 3,278评论 0 6
  • *面试心声:其实这些题本人都没怎么背,但是在上海 两周半 面了大约10家 收到差不多3个offer,总结起来就是把...
    Dove_iOS阅读 27,121评论 29 470
  • 1、堆和栈什么区别? 答:管理方式:对于栈来讲,是由编译器自动管理,无需我们手工控制;对于堆来说,释放工作由程序员...
    庞大不小阅读 499评论 0 4
  • 史上最全的iOS面试题及答案 iOS面试小贴士———————————————回答好下面的足够了----------...
    Style_伟阅读 2,344评论 0 35