使用什么和什么功能可以在不同的iphone屏幕使用时间不准确之间实现文本块移动

Block代码块中 使用了self 前边要加弱引用(__weak)全局变量不能在里边改变,改变会泄漏,可以使用属性值进行使用

文中的问题多收集整理自网络不保证100%准确,还望斟酌采纳 

1 .防止數组越界,必须让指针指向一个有效的内存地址,   

2. 防止向一块内存中拷贝过多的内容  

5. 防止改变指向静态存储区的内容  

是赋值特性setter方法将传叺参数赋值给实例变量;仅设置变量时;  4. retain 表示持有特性,setter方法将传入参数先保留再赋值,传入参数的retaincount会+1;  5. copy 表示赋值特性setter方法将传入對象复制一份;需要完全一份新的变量时。  6. nonatomic 非原子操作决定编译器生成的setter getter是否是原子操作,atomic表示多线程安全

   id 声明的对象具有运荇时的特性,即可以指向任意类型的objcetive-c的对象; 

  1. atomic提供多线程安全是防止在写未完成的时候被另外一个线程读取,造成数据错误  2. non-atomic:在自巳管理内存的环境中解析的访问器保留并自动释放返回的值,如果指定了 nonatomic

  那么访问器只是简单地返回这个值。 

  1.通过web服务保存在服务器上  2.通过NSCoder固化机制,将对象保存在文件中  3.通过SQlite或CoreData保存在文件数据库中 

objective-c– 类里面的方法只有两种, 静态方法和实例方法. 这似乎就不是完整的面向对象了,按照OO的原则就是一个对象

只暴露有用的东西. 如果没有了私有方法的话,对于一些小范围的代码重用就不那么顺手叻. 在类里面声名一个私有方法

@private可以用来修饰私有变量在Objective‐C中所有实例变量默认都是私有的,所有实例方法默认都是公有的

  const意味着”呮读”下面的声明都是什么意思?

  前两个的作用是一样a是一个常整型数。第三个意味着a是一个指向常整型数的指针(也就是整型数是不可修改的,但指针可以)

    第四个意思a是一个 指向整型数的常指针(也就是说指  针指向的整型数是可以修改的,但指针是鈈可修改的)最后一个意味

  着a是一个指向常整型数的常指针(也就是说,指针指向 的整型数是不可修改的同时指针也是不可修改嘚)。

  关键字const的作用是为给读你代码的人传达非常有用的信息实际上,声明一个参数为常量是为了告诉了用户这个参数的应用目的

  如果你曾花很多时间清理其它人留下的垃圾你就会很快学会感谢这点多余的信息。(当然懂得用const的程序员很少会留下的

  垃圾讓别人来清理的。)通过给优化器一些附加的信息使用关键字const也许能产生更紧凑的代码。合理地使用关键字const

  可以使编译器很自然地保护那些不希望被改变的参数防止其被无意的代码修改。简而言之这样可以减少bug的出现。

  欲阻止一个变量被改变可以使用 const 关键芓。在定义该const 变量时通常需要对它进行初始化,因为以后就没有机会再

  去改变它了; 

  2)对指针来说可以指定指针本身为const,也鈳以指定指针所指的数据为 const或二者同时指定为const;   3)在一个函数声明中,const可以修饰形参表明它是一个输入参数,在函数内部不能改變其值;   4)对于类的成员函数若指定其为const 类型,则表明其是一个常函数不能修改类的成员变量;   5)对于类的成员函数,有时候必须指定其返回值为const 类型以使得其返回值不为“左值”。

  一个定义为volatile的变量是说这变量可能会被意想不到地改变这样,编译器僦不会去假设这个变量的值了精确地说就是,

  优化器在用到这个变量时必须每次都小心地重新读取这个变量的值而不是使用保存茬寄存器里的备份。

  下面是volatile变量的几个例子:

  1) 并行设备的硬件寄存器(如:状态寄存器)  2) 一个中断服务子程序中会访问箌的非自动变量(Non-automatic variables)  3)多线程应用中被几个任务共享的变量

  是的一个例子是只读的状态寄存器。它是volatile因为它可能被意想不到地改变它是const因为程序不应该试图去修改它。

  尽管这种情况并不常见但它还是可以。一个例子就是:

  当一个中断服务子程序企图去修妀一个指向一个buffer指针的时候

  1)函数体内 static 变量的作用范围为该函数体,不同于 auto 变量该变量的内存只被分配一次,因此其值在下次调鼡时

  2)在模块内的 static 全局变量可以被模块内所用函数访问但不能被模块外其它函数访问;  3)在模块内的 static 函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在声明它的模块内;  4)在类中的 static 成员变量属于整个类所拥有对类的所有对象只有一份拷貝;  5)在类中的 static 成员函数属于整个类所拥有,这个函数不接收 this 指针因而只能访问类的static 成员变量。

  只导入一次不会重复导入,楿当于#include和#pragma once;@class告诉编译器某个类的声明当执行时,

  才去查看类的实现文件可以解决头文件的相互包含;#import<>用来包含系 统的头文件,#import””用來包含用

  户头文件 

  进程和线程都是由操作系统所体会的程序运行的基本单元,系统利用该基本单元实现系统对应用的并发性進程和线程的主要差别

  在于它们是不同的操作系统资源管理方式。进程有独立的地址空间一个进程崩溃后,在保护模式下不会对其咜进程产生影响

  而线程只是一 个进程中的不同执行路  径。线程有自己的堆栈和局部变量但线程之间没有单独的地址空间,一個线程死掉就

  等于整个进程死掉所以多进程的程序要比多线程的程 序健壮,但在进程切换时耗费资源较大,效率要差一些但对於一些要求

  同时进行并且又要共享某些变量的并发操作,只能用线程不能用进程。

  管理方式:对于栈来讲是由编译器自动管悝,无需我们手工控制;对于堆来说释放工作由程序员控制,容易产生memoryleak

  申请大小:  栈:在Windows下,栈是向低地址扩展的数据结构,昰一块连续的内存的区域这句话的意思是栈顶的地址和栈的最大容量是系统

  预先规定好的,在 WINDOWS下栈的大小是2M(也有的说是1M,总之昰一个编译时就确定的常数)如果申请的空间超过栈的

  余空间时,将提示overflow因 此,能从栈获得的空间较小
  堆:堆是向高地址擴展的数据结构,是不连续的内存区域这是由于系统是用链表来存储的空闲内存地址的,自然是不连续的

  而链表的遍历方向是由低地址向高地址。堆的大小受限于计算机系统中有效的虚拟内存由此可见,堆获得的空间比较灵活

  碎片问题:对于堆来讲,频繁嘚new/delete势必会造成内存空间的不连续从而造成大量的碎片,使程序效率降低对于栈来讲,

  则不会存在这个问题因为栈是先进后出的隊列,他们是如此的一一对应以至于永远都不可能有一个内存块从栈中间弹出
  分配方式:堆都是动态分配的,没有静态分配的堆棧有2种分配方式:静态分配和动态分配。静态分配是编译器完成的比如局部

  变量的分配。动态分配由alloca函数进行分配但是栈的动态汾配和堆是不同的,他的动态分配是由编译器进行释放无需我们

  分配效率:栈是机器系统提供的数据结构,计算机会在底层对栈提供支持:分配专门的寄存器存放栈的地址压栈出栈都有专门的

  指令执行,这就决定了栈的效率比较高堆则是C/C++函数库提供的,它的機制是很复杂的

  1)当你使用new,alloc和copy方法创建一个对象时,该对象的保留计数器值为1.当你不再使用该对象时,你要负责向该对象发送一条

  release戓autorelease消息.这样,该对象将在使用寿命结束时被销毁.
  2)当你通过任何其他方法获得一个对象时,则假设该对象的保留计数器值为1,而且已经被设置为自动释放,你不需要执行任何操作来

   确保该对象被清理.如果你打算在一段时间内拥有该对象,则需要保留它并确保在操作完成时释放它.
  3)如果你保留了某个对象,你需要(最终)释放或自动释放该对象.必须保持retain方法和release方法的使用次数相等.为什么很多

3)对象c创建并引用到叻对象b.  这时候b和c的引用计数分别是2和1。当a不再使用b调用release释放对b的所有权,因为c还引用了b所以b的引用计数为1,

  b不会被释放b不釋放,c的引用计数就是1c也不会被释放。从此b和c永远留在内存中。这种情况必须打断循环引用

  通过其他规则来维护引用关系。比洳我们常见的delegate往往是assign方式的属性而不是retain方式 的属性,

  赋值不会增加引用计数就是为了防止delegation两端产生不必要的循环引用。如果一个UITableViewController對象a

  那基本上就没有机会释放这两个对象了自己在设计使用delegate模式时,也要注意这点

  retain和copy用于对象,  copy用于当a指向一个对象b吔想指向同样的对象的时候,如果用assigna如果释放,再调用b会crash,如果用copy 的方式

  a和b各自有自己的内存,就可以解决这个问题retain 会使计数器加一,也可以解决assign的问题
  另外:atomic和nonatomic用来决定编译器生成的getter和setter是否为原子操作。在多线程环境下原子操作是必要的,

  否则有可能引起错误的结果加了atomic,setter函数会变成下面这样: 

   都会是一个新的Runloop

  程序最开始显示TableView的情况是:

  并给cell指定同样的重用标识(当然可以为不同显示类型的 cell指定不同的标识)。并且10个cell全部都加入到visiableCells数组

  2. 向下拖动tableView,当cell1完全移出iphone屏幕使用时间不准确并且cell11(它也是alloc出来嘚,原因同上)完全显示出来的时候cell11加入到

  当view需要被展示而它却是nil时,viewController会调用该方法不要直接调用该方法。  如果手工维护views必須重载重写该方法  如果使用IB维护views,必须不能重载重写该方法

  你在控制器中实现了loadView方法那么你可能会在应用运行的某个时候被内存管理控制调用。 如果设备内存不足的时候

  将被再次调用来创建一个新的view。

  viewDidLoad 此方法只有当view从nib文件初始化的时候才被调用  偅载重写该方法以进一步定制view  在iPhone OS 3.0及之后的版本中,还应该重载重写viewDidUnload来释放对view的任何索引  viewDidLoad后调用数据Model

  (系统release view时已经将其release掉了)茬该方法中释放其他与view有关的对象、其他在运行时创建

  (但非系统必须)的对象、在viewDidLoad中被创建的对象、缓存数据等 release对象后将对象置為nil(IBOutlet只需要将

  请求时,viewDidLoad还会重新被执行viewDidUnload中被release的对象必须是很容易被重新创建的对象(比如在

  viewDidLoad或其他方法中创建的对象)不要release用戶数据或其他很难被重新创建的对象

  把释放内存的代码放到viewDidUnload中去。这个函数的默认实现是:检查controller是否可以安全地释放它的view(这里加粗的

  如果view可以被释放那么这个函数释放view并调用viewDidUnload。你可以重载这个函数来释放controller中使用的其他内存

  view的子view的引用,那么在早期的iOS版本中,你应该在这个函数中来释放这些引用而在iOS3.0或更高版本中,

  你应该在viewDidUnload中释放这些引用

  MVC设计模式考虑三种对象:模型对象、视圖对象、和控制器对象。模型对象代表特别的知识和专业技能它们负责保有应用程序

  的数据和定义操作数据的 逻辑。视图对象知道洳何显示应  用程序的模型数据而且可能允许用户对其进行编辑。控制器对象

  是应用程序的视图对象和模型对象之间的协调者

  当通过KVC调用对象时,比如:[self valueForKey:@”someKey”]时程序会自动试图通过几种不同的方式解析这个调用。

  首先查找对象是否带有 someKey 这个方法如果沒找到,会继续查找对象是否带有someKey这个实例变量(iVar)

  如果还没有找到,程序会继续试图调用 -(id)valueForUndefinedKey:这个方法如果这个方法还是没有被实現的话,

  这个方法还会查找getsomeKey这个方法,前面加一个get或者_someKey以及 _getsomeKey这几种形式。同时

  查找实例变量的时候也会不仅仅查找someKey这个变量,也会查找_someKey这个变量是否存在)设计valueForUndefinedKey:

  方法的主要目的是当你使用-(id)valueForKey方法从对象中请求值时,对象能够在错误发生前有最后的机会响應这个请求。

  1)id和void *并非完全一样在上面的代码中,id是指向struct objc_object的一个指针这个意思基本上是说,id是一个指向任何

  一个继承了Object(或鍺NSObject)类的对象需要注意的是id 是一个指针,所以你在使用id的时候不需要加星号

  比如id foo=nil定义了一个nil指针,这个指针指向NSObject的一个任意子类而id *foo=nil则定义了一个指针,这个

  指针指向另一个指针被指向的这个指针指向NSObject的一个子类。 

  2)nil和C语言的NULL相同在objc/objc.h中定义。nil表示一个Objctive-C對象这个对象的指针指向空(没有东西就是空)。

  2)你retain或copy的你需要释放它。例如:

  对象2接收对象1的一个自动释放的值或传遞一个基本数据类型(NSInteger,NSString)时: 你或希望将对象2进行retain

  以防止它在被使用之前就被自动释放掉。但是在retain后一定要在适当的时候进行释放。

  [NSArray array]和[NSDate date]等“方法”建立一个索引计数为1的对象但是也是一个自动释放对象所以是本地临时对象,

  那么无所谓了如果是打算在全ClassΦ使用的变量(iVar),则必须retain它缺省的类方法返回值都被执行了“自动释放”方法。

  有时我们需要在一个已经定义好的类中增加一些方法而不想去重写该类。比如当工程已经很大,代码量比较多或者类中

  已经包住很多方法,已经有其他代码调用了该类创建对象并使用该类的方法时可以使用类别对该类扩充新的方法。注意:

  类别只能扩充方法而不能扩充成员变量。

  委托代理(degegate)顾名思义,把某个对象要做的事情委托给别的对象去做那么别的对象就是这个对象的代理,代替它

  来打理要做的事反映到程序中,首先要明确一个对象的委托  方是哪个对象委托所做的内容是什么。委托机制是一种设计

  模式在很多语言中都用到的,这只是个通用的思想网上会有很多关于这方面的介绍。那么在苹果开发过程中用到委托的

  程序实现思想如下,我主要拿如何在视图之间传輸信息做个例子譬如:在两个页面(UIIview视图对象)实现传值,

  用委托(delegate)可以很好做到!

 这样在视图A和B之间可以通过委托来传值!

下媔这个例子委托有两类:1、一个视图类对象的代理对象为父视图子视图用代理实现让父视图显示别的子视图2、同一父视图下的一个子视圖为另一个子视图的代理对象,让另一个子视图改变自身背景色为给定的颜色===============================================规范格式如下:

  frame:该view在父view坐标系统中的位置和大小(参照点是,父亲的坐标系统)

  bounds:该view在本地坐标系统中的位置和大小(参照点是,本地坐标系统)

  如果按http来算就是4个请求,但是cpu是抢占式资源,所以一般来说并发量昰要根据任务的 耗时和cpu的繁忙度来计算4个左右

  只是个经验值你开10个短耗时的任务和几个长耗时任务的效率是不同的- -..一般来说估算这个量的最大效率估算公示是cpu

  核数*2-1这个公式是当时对集群进行压测得到的结论.cpu抢占时间跟任务时长…开启这个数量的 线程可以最大化的榨干cpu

  一个道理。cpu不可能都被抢去做connection.iOS是cpu密集型的消耗?这个大概知道就行了,也不会有人特 别在意吧…

  cpu核数*2-1那个是做淘宝的java团队压测嘚到的线程最优数?,放在iOS上也多少适用…一般来说不超过这个量就好,

  线程不是起的越多越好线程数就是…cpu来决定的

  core data 模型层所需嘚基本功能,用户可通过子类化NSManagedObject建立自己的数据模型。 

  当数组在程序运行时需要不断变化的,使用NSMutableArray当数组在初始化后,便不再妀变的

      NSAarry的数组里新增和删除元素但不表明其数 组內的元素的内容不能发生改变。NSArray是线程安

字符串使用copy是为了外部把字符串内容改了,不影響该属性 

在使用字符串或block的时候用copy修饰在网上有人觉得有另外一种理解问题的

方式就是理解成如何要自己的类也支持copy功能,这样的话要答遵从NSCopying协议然后实现 

@class一般用于头文件中需要声明该类的某个实例变量的时候用到,在m文 件中还是需要使用#import

而#import比起#include的好处就是不会引起交叉编译

件 实 例机制而不是工厂方法或函数。

  1. 如果内存缓存中没有生成 NSInvocationOperation 添加到队列开始从硬盘查找图片是否已经缓存。

  2. 根据 URLKey 在硬盘缓存目录下尝试读取图片文件这一步是在 NSOperation 进行的操作,所以回主线程进行结果回调 notifyDelegate:

  3. 图片下载由 NSURLConnection 来做,实现相关 delegate 来判断图片下载中、下载完荿和下载失败

  4. 图片解码处理在一个 NSOperationQueue 完成,不会拖慢主线程 UI如果有需要对下载的图片进行二次处理,最好也在这里完成效率会好很多。

  5. 通知所有的 downloadDelegates 下载完成回调给需要的地方展示图片。

  6. 将图片保存到 SDImageCache 中内存缓存和硬盘缓存同时保存。写文件到硬盘也在以单独 NSInvocationOperation 完成避免拖慢主线程。

  7. SDImageCache 在初始化的时候会注册一些消息通知在内存警告或退到后台的时候清理内存图片缓存,应用结束的时候清理过期图片

    从上面流程可以看出,当你调用setImageWithURL:方法的时候他会自动去给你干这么多事,当你需要在某一具体时刻做事情的时候

    你可以覆盖这些方法。比如在下载某个图片的过程中要响应一个事件就覆盖这个方法(对于初级来说,用sd_setImageWithURL:的若干个方法就可以实现很好的图片缓存):

两鍺最大的区别是,图层不会直接渲染到iphone屏幕使用时间不准确上UIView是iOS系统中界面元素的基础,所有的界面元素都是继承自它

它本身完全是由CoreAnimation來实现的。它真正的绘图部分是由一个CALayer类来管理。UIView本身更像是一个CALayer的管理器

答案:懒加载模式,只在用到的时候才去初始化也可以悝解成延时加载。我觉得最好也最简单的一个列子就是tableView中图片的加载显示了

一个延时载,避免内存过高一个异步加载,避免线程堵塞

TCP---传输控制协议,提供的是面向连接、可靠的字节流服务。当客户和服务器彼此交换数据前必须先在双方之间建立一个TCP连接,

之后才能传輸数据TCP提供超时重发,丢弃重复数据检验数据,流量控制等功能保证数据能从一端传到另一端。 

UDP---用户数据报协议是一个简单的面姠数据报的运输层协议。UDP不提供可靠性它只是把应用程序传给IP层的数据报发送出去,

但是并不能保证它们能到达目的地由于UDP在传输数據报前不用在客户和服务器之间建立一个连接,且没有超时重发等机制

故而传输速度很快 TCP(Transmission Control Protocol,传输控制协议)是基于连接的协议也就昰说,在正式收发数据前

必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”才能建立起来我们来看看这三次对话的简单過程:

1.主机A向主机B发出连接请求数据包;

2.主机B向主机A发送同意连接和要求同步(同步就是两台主机一个在发送,一个在接收协调工作)嘚数据包;

3.主机A再发出一个数据包确认主机B的要求同步:“我现在就发,你接着吧!”这是第三次对话。三次“对话”的目的是使数据包的发送和接收同步

经过三次“对话”之后,主机A才向主机B正式发送数据 

UDP(User Data Protocol,用户数据报协议)是与TCP相对应的协议它是面向非连接嘚协议,它不与对方建立连接而是直接就把数据包发送过去! 

UDP适用于一次只传送少量数据、对可靠性要求不高的应用环境, tcp协议和udp协议的差别 是否连接面向连接面向非连接 传输可靠性可靠不可靠 

应用场合传输大量数据少量数据速度慢快.

简单说,你浏览的网页(网址以http://开头)都昰http协议传输到你的浏览器的, 而http是基于socket之上的

HTTP协议:简单对象访问协议,对应于应用层  HTTP协议是基于TCP连接的

TCP/IP是传输层协议,主要解决数据洳何在网络中传输;而HTTP是应用层协议主要解决如何包装数据。

Socket是对TCP/IP协议的封装Socket本身并不是协议,而是一个调用接口(API)通过Socket,我们財能使用TCP/IP协议

http连接:http连接就是所谓的短连接,即客户端向服务器端发送一次请求服务器端响应后连接即会断掉;

socket连接:socket连接就是所谓嘚长连接,理论上客户端和服务器端一旦建立起连接将不会主动断掉;但是由于各种环境因素可能会是连接断开

比如说:服务器端或客戶端主机down了,网络故障或者两者之间长时间没有数据传输,网络防火墙可能会断开该连接以释放网络资源

所以当一个socket连接中没有数据嘚传输,那么为了维持连接需要发送心跳消息~~具体心跳消息格式是开发者自己定义的

HTTP URL (URL是一种特殊类型的URI是他的子类,包含了用于查找某個资源的足够的信息)的格式如下:

]http表示要通过HTTP协议来定位网络资源;host表示合法的Internet主机域名或者IP地址;port指定一个端口号

为空则使用缺省端ロ80;abs_path指定请求资源的URI;如果URL中没有给出abs_path,那么当它作为请求URI时

必须以“/”的形式给出,通常这个工作浏览器自动帮我们完成

第一次握掱:客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态等待服务器确认;

第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1)同时自己也发送一个SYN包(syn=k),即SYN+ACK包

此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1)此包发送完毕,客户端和服务器进入

ESTABLISHED狀态完成三次握手。握手过程中传送的包里不包含数据三次握手完毕后,客户端与服务器才正式开始传送数据

理想状态下,TCP连接一旦建立在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去断开连接时服务器

和客户端均可以主动发起断开TCP连接的請求,断开过程需要经过“四次握手”(过程就不细写了就是服务器和客户端交互,最终确定断开) 

1、NULL是C语言中的空指针

2、nil是OC中指向涳对象的指针。

3、Nil是OC指向类的空指针

4、NSNull是在数组或字典集合对象中表示空值对象。   

1 释放该指针指向的内存,只有堆上的内存才需要我们掱工释放,栈上不需要. 

HTTP是一个属于应用层的面向对象的协议由于其简捷、快速的方式,适用于分布式超媒体信息系统目前在WWW中使用的是HTTP/1.0嘚第六版,

HTTP/1.1的规范化工作正在进行之中http(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议,常基于TCP的连接方式

HTTP1.1版本中给出一种持续连接的机制,绝大多数的Web开发都是构建在HTTP协议之上的Web应用。

HTTP协议的主要特点可概括如下:

1.支持客户/服务器模式2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不哃

由于HTTP协议简单,使得HTTP服务器的程序规模小因而通信速度很快。

3.灵活:HTTP允许传输任意类型的数据对象正在传输的类型由Content-Type加以标记。4.無连接:无连接的含义是限制每次连接只处理一个请求服务器处理完客户的请求,并收到客户的应答后即断开连接。采用这种方式可鉯节省传输时间5.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力缺少状态意味着如果后续处理需要前面的信息,则它必须重传

这样可能导致每次连接传送的数据量增大。另一方面在服务器不需要先前信息时它的应答就较快。 

     添加至少一个事件源然后去run它。 一般情况下我们是没有必要去启用线程的RunLoop的除非你在

     一个单独的线程中需要长久的检测某个事件。主线程默认有Runloop当洎己启动一个线程,如果只是用于

     处理单一的事件则该线程在执行完之后就退出了。 所以当我们需要让该线程监听某项事务时就得让線程一

     直不退出,runloop就是这么一个循环没有事件的时候,一直卡着有事件来临了,执行其对应的函数

     RunLoop,正如其名所示,是线程进入和被线程用来相应事件以及调用事件处理函数的地方.需要在代码中使用控制

提示:一般在开发中很少会主动创建Runloop,而通常会把事件添加到Runloop中. 

RunTime简称运行時。就是系统在运行的时候的一些机制其中最主要的是消息机制。对于C语言函数的调用在编译的时候会决

定调用哪个函数(C语言的函數调用请看这里 )。编译完成之后直接顺序执行无任何二义性。OC的函数调用成为消息发送

属于动态调用过程。在编译的时候并不能决萣真正调用哪个函数(事实证明在编译阶段,OC可以调用任何函数即使这个函

数并未实现,只要申明过就不会报错而C语言在编译阶段僦会报错)。只有在真正运行的时候才会根据函数的名称找到对应的函数来调用

SEL为key通过hash表来存储的,这样能提高函数查找速度)若 cache中未找到。再去methodList中查找若methodlist中未找到,

则取superClass中查找若能找到,则将method加 入到cache中以方便下次查找,并通过method中的函数指针跳转到对应的函数


如果您觉得阅读完本文对您有帮助,请点一下“推荐”按钮您的推荐将是我写作的最大动力;本文版权归作者和博客园共有,来源网址:欢迎各位转载,但未经作者本人同意转载文章之后必须在文章页面明显位置给出作者和原文连接否则保留追究法律责任的权利。

如果在 Intent Filter 中指定了这些属性那么呮有所有的属性都匹配成功时 URI 数据匹配才会成功。

19. Intent传递数据时可以传递哪些类型数据?

    说自己项目中有这样一个网络更新的功能,显示界媔就用的activity, 后台有个service每隔半小时都去访问下服务器获取更新的数据…

开启服务用的是intent来开启

有很多广播接收者 ,系统已经实现了.

指定接收者的廣播 .  是不可以被拦截掉的 

 用于接收系统的广播通知, 系统会有很多sd卡挂载,手机重启,广播通知,低电量,来电,来短信等….

来获取短信到来的广播, 根據黑名单来判断是否拦截该短信.

 画画板生成图片后,发送一个sd挂载的通知,通知系统的gallery去获取到新的图片.

android  系统下 不同程序 数据默认是不能共享訪问

24. 请介绍下Android的数据存储方式

    屏蔽数据存储的细节,对用户透明,用户只需要关心操作数据的uri就可以了

26. 请介绍下Android中常用的五种布局。

线性布局这个东西,从外框上可以理解为一个div他首先是一个一个从上往下罗列在iphone屏幕使用时间不准确上。每一个LinearLayout里面又可分为垂直布局

)當垂直布局时,每一行就只有一个元素多个元素依次垂直往下;水平布局时,只有一行每一个元素依次向右排列。

指定平板机型的游戲开发中经常用到绝对布局  widget 绝对布局

指定机型的平板游戏开发机顶盒开发. 2.3 3.0

    相对布局可以理解为某一个元素为参照物,来定位的布局方式主要属性有:

每一个布局都有自己适合的方式,另外这五个布局元素可以相互嵌套应用,做出美观的界面

28. widget相对位置的完成在activity的哪个苼命周期阶段实现。

 这个题没看懂…

widget可以理解成桌面小控件,

30. AIDL的全称是什么如何工作?

31. 请解释下Android程序运行时权限与文件系统权限的区别

   Android程序执行需要读取到安全敏感项必需在androidmanifest.xml中声明相关权限请求, 打电话,访问网络,获取坐标,读写sd卡,读写联系人等..安装的时候会提示用户…

777自己 同組 其他

32. 系统上安装了多种浏览器,能否指定某浏览器访问指定页面

   找到对应的浏览器的意图,传递数据URI , 激活这个意图

34. 对android虚拟机的理解,包括内存管理机制垃圾回收机制

虚拟机很小,空间很小,谈谈移动设备的虚拟机的大小限制 16M ,

谈谈加载图片的时候怎么处理大图片的,d

垃圾回收,没囿引用的对象,在某个时刻会被系统gc掉.

36.  android本身的一些限制,比如apk包大小限制读取大文件时的时间限。

 这个问题问的有问题, apk包大小限制不好说,

極品飞车有100M 还是能装到手机上,

apk包,精简包, 素材存放在服务器. 游戏程序.

读大文件的时间限制应该是main线程里面的时间限制吧.

37. 如何加载的音乐信息如何改善其效率。

显示出来,改善效率,是个常见问题, 可以从以下几个方面作答,

分批加载数据, 延时加载数据, 合理使用缓存等...

异步加载数据, 分頁加载数据,

使用静态的view对象 避免创建过多的view.

39. 启动应用后改变系统语言,应用的语言会改变么

40. 启动一个程序,可以主界面点击图标进入也可以从一个程序中跳转过去,二者有什么区别

将Java 游戏或者j2me程序移植到Android平台的过程中,

Activity有不同的启动模式, 可以影响到task的分配

Task简单的說,就是一组以栈的模式聚集在一起的Activity组件集合它们有潜在的前后驱关联,新加入的Activity组件位于栈顶,并仅有在栈顶的Activity才会有机会与鼡户进行交互。而当栈顶的Activity完成使命退出的时候Task会将其退栈,并让下一个将跑到栈顶的Activity来于用户面对面直至栈中再无更多Activity,Task结束

Task栈(粗体为栈顶组件)

选中一封邮件,点击查看详情(Activity B

点击回复开始写新邮件(Activity C

写了几行字,点击选择联系人进入选择联系人界面(Activity D

选择好了联系人,继续写邮件

写好邮件发送完成,回到原始邮件

如上表所示是一个实例。从用户从进入邮箱开始到回复完成,退出应用整个过程的Task栈变化这是一个标准的栈模式,对于大部分的状况这样的Task模型,足以应付但是,涉及到实际的性能、开销等问題就会变得残酷许多。

比如启动一个浏览器,在Android中是一个比较沉重的过程它需要做很多初始化的工作,并且会有不小的内存开销泹与此同时,用浏览器打开一些内容又是一般应用都会有的一个需求。设想一下如果同时有十个运行着的应用(就会对应着是多个Task),都需要启动浏览器这将是一个多么残酷的场面,十个Task栈都堆积着很雷同的浏览器Activity

是多么华丽的一种浪费啊。

于是你会有这样一种设想浏览器Activity,可不可以作为一个单独的Task而存在不管是来自那个Task的请求,浏览器的Task都不会归并过去。这样虽然浏览器Activity本身需要维系的狀态更多了,但整体的开销将大大的减少这种舍小家为大家的行为,还是很值得歌颂的

standard模式 是默认的也是标准的Task模式,在没有其他因素的影响下使用此模式的Activity,会构造一个Activity的实例加入到调用者的Task栈中去,对于使用频度一般开销一般什么都一般的Activity而言standard模式无疑是最匼适的,因为它逻辑简单条理清晰所以是默认的选择。

而singleTop模式基本上于standard一致,仅在请求的Activity正好位于栈顶时有所区别。此时配置成singleTop嘚Activity,不再会构造新的实例加入到Task栈中而是将新来的Intent发送到栈顶Activity中,栈顶的Activity可以通过重载onNewIntent来处理新的Intent(当然也可以无视...)。这个模式降低了位于栈顶时的一些重复开销,更避免了一些奇异的行为(想象一下如果在栈顶连续几个都是同样的Activity,再一级级退出的时候这是怎么样的用户体验...),很适合一些会有更新的列表Activity展示一个活生生的实例是,在Android默认提供的应用中浏览器(Browser)的书签Activity(BrowserBookmarkPage),就用的是singleTop

标志为singleTask的Activity,最多仅有一个实例存在并且,位于以它为根的Task中所有对该Activity的请求,都会跳到该Activity的Task中展开进行singleTask,很象概念中的单件模式所有的修改都是基于一个实例,这通常用在构造成本很大但切换成本较小的Activity中。最典型的例子还是浏览器应用的主Activity(名为Browser...),它是展示当前tab当前页面内容的窗口。它的构造成本大但页面的切换还是较快的,于singleTask相配还是挺天作之合的。

singleInstance显得更为极端一些在大部汾时候singleInstance与singleTask完全一致,唯一的不同在于singleInstance的Activity,是它所在栈中仅有的一个Activity如果涉及到的其他Activity,都移交到其他Task中进行这使得singleInstance的Activity,像一座孤岛彻底的黑盒,它不关注请求来自何方也不计较后续由谁执行。在Android默认的各个应用中很少有这样的Activity,在我个人的工程实践中曾尝试茬有道词典的快速取词Activity中采用过,

是因为我觉得快速取词入口足够方便(从notification中点选进入)并且会在各个场合使用,应该做得完全独立

1.配置后当启动这个activity时就先去找有没有activity的亲和力属性相同有就加入这个

2.affinity起作用需要的条件二者具备一个:

43. 在Android中,怎么节省内存的使用怎么主動回收内存?

//未来的某一段时间执行 

44. 不同工程中的方法是否可以相互调用

45. 在Android中是如何实现判断区分电话的状态,去电来电、未接来电?

46. dvm的进程和Linux的进程, 应用程序的进程是否为同一个概念

Dvm的进程是dalivk虚拟机进程,每个android程序都运行在自己的进程里面,

每个dvm都是linux里面的一个进程.所以說这两个进程是一个进程.

48. 如何判断是否有SD卡

49. 嵌入式操作系统内存管理有哪几种, 各有何特性

页式,段式段页,等 …

50. 什么是嵌入式实時操作系统, Android 操作系统属于实时操作系统吗?

实时操作系统是指当外界事件或数据产生时能够接受并以足够快的速度予以处理,其处理的结果又能在规定的时间之内来控制生产过程或对处理系统作出快速响应并控制所有实时任务协调一致运行的嵌入式操作系统。主要用于工業控制、军事设备、航空航天等领域对系统的响应时间有苛刻的要求这就需要使用实时系统。又可分为软实时和硬实时两种而android是基于linux內核的,因此属于软实时

51. 一条最长的短信息约占多少byte?

中文70(包括标点),英文160160个字节 这个说法不准确,

要跟手机制式运营商等信息有关.

52. Linux中跨進程通信的几种方式 。

# 管道( pipe )管道是一种半双工的通信方式数据只能单向流动而且只能在具有亲缘关系的进程间使用进程的亲缘关系通常是指父子进程关系。

# 有名管道 (named pipe) : 有名管道也是半双工的通信方式但是它允许无亲缘关系进程间的通信。

# 信号量( semophore ) : 信号量是一个计數器可以用来控制多个进程对共享资源的访问。它常作为一种锁机制防止某进程正在访问共享资源时,其他进程也访问该资源因此,主要作为进程间以及同一进程内不同线程之间的同步手段

# 消息队列( message queue ) : 消息队列是由消息的链表,存放在内核中并由消息队列标识符标識消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。

# 信号 ( sinal ) : 信号是一种比较复杂的通信方式鼡于通知接收进程某个事件已经发生。

# 共享内存( shared memory ) :共享内存就是映射一段能被其他进程所访问的内存这段共享内存由一个进程创建,但哆个进程都可以访问共享内存是最快的 IPC 方式,它是针对其他进程间通信方式运行效率低而专门设计的它往往与其他通信机制,如信号兩配合使用,来实现进程间的同步和通信

# 套接字( socket ) : 套解口也是一种进程间通信机制,与其他通信机制不同的是它可用于不同及其间嘚进程通信。

我们项目中那些地方用到了ndk, 

4、不受任何限制的开发商

5、无缝结合的Google应用

1、安全问题、隐私问题

2、卖手机的不是最大运营商

3、運营商对Android手机仍然有影响

5、过分依赖开发商缺乏标准配置

55. Android系统中GC什么情况下会出现内存泄露呢?  视频编解码/内存泄露

导致内存泄漏主要嘚原因是先前申请了内存空间而忘记了释放。如果程序中存在对无用对象的引用那么这些对象就会驻留内存,消耗内存因为无法让垃圾回收器GC验证这些对象是否不再需要。如果存在对象的引用这个对象就被定义为"有效的活动",同时不会被释放要确定对象所占内存將被回收,我们就要务必确认该对象不再会被使用典型的做法就是把对象数据成员设为null或者从集合中移除该对象。但当局部变量不需要時不需明显的设为null,因为一个方法执行完毕时这些引用会自动被清理。

Java带垃圾回收的机制,为什么还会内存泄露呢?

}//此时所有的Object对象都沒有被释放,因为变量v引用这些对象 

Java 内存泄露的根本原因就是 保存了不可能再被访问的变量类型的引用

       在Android系统中,所有安装到系统的应鼡程序都必有一个数字证书此数字证书用于标识应用程序的作者和在应用程序之间建立信任关系

Android系统要求每一个安装进系统的应用程序嘟是经过数字证书签名的,数字证书的私钥则保存在程序开发者的手中Android将数字证书用来标识应用程序的作者和在应用程序之间建立信任關系,不是用来决定最终用户可以安装哪些应用程序

这个数字证书并不需要权威的数字证书签名机构认证(CA),它只是用来让应用程序包自峩认证的

同一个开发者的多个程序尽可能使用同一个数字证书,这可以带来以下好处

(1)有利于程序升级,当新版程序和旧版程序的数字證书相同时Android系统才会认为这两个程序是同一个程序的不同版本。如果新版程序和旧版程序的数字证书不相同则Android系统认为他们是不同的程序,并产生冲突会要求新程序更改包名。

(2)有利于程序的模块化设计和开发Android系统允许拥有同一个数字签名的程序运行在一个进程中,Android程序会将他们视为同一个程序所以开发者可以将自己的程序分模块开发,而用户只需要在需要的时候下载适当的模块

在签名时,需要栲虑数字证书的有效期:

(1)数字证书的有效期要包含程序的预计生命周期一旦数字证书失效,持有改数字证书的程序将不能正常升级

(2)如果多个程序使用同一个数字证书,则该数字证书的有效期要包含所有程序的预计生命周期

(3)Android Market强制要求所有应用程序数字证书的有效期要持續到2033年10月22日以后。

Android数字证书包含以下几个要点:

 (1)所有的应用程序都必须有数字证书Android系统不会安装一个没有数字证书的应用程序

 (2)Android程序包使鼡的数字证书可以是自签名的,不需要一个权威的数字证书机构签名认证

 (3)如果要正式发布一个Android 必须使用一个合适的私钥生成的数字证书來给程序签名,而不能使用adt插件或者ant工具生成的调试证书来发布

 (4)数字证书都是有有效期的,Android只是在应用程序安装的时候才会检查证书的囿效期如果程序已经安装在系统中,即使证书过期也不会影响程序的正常功能

58. 什么是ANR 如何避免它?

在Android上如果你的应用程序有一段时間响应不够灵敏,系统会向用户显示一个对话框这个对话框称作应用程序无响应(ANR:Application Not Responding)对话框。用户可以选择让程序继续运行但是,怹们在使用你的应用程序时并不希望每次都要处理这个对话框。因此在程序里对响应性能的设计很重要,这样系统不会显示ANR给用户。

59. android中的动画有哪几类它们的特点和区别是什么?

两种一种是Tween动画、还有一种是Frame动画。

Tween动画这种实现方式可以使视图组件移动、放大、缩小以及产生透明度的变化;

可以通过布局文件,可以通过代码

2 控制一个Layout里面子View的动画效果

另一种Frame动画,传统的动画方法通过顺序的播放排列好的图片来实现,类似电影

62. 说说mvc模式的原理,它在android中的运用

MVC英文即Model-View-Controller,即把一个应用的输入、处理、输出流程按照Model、View、Controller的方式進行分离这样一个应用被分成三个层——模型层、视图层、控制层。

Android中界面部分也采用了当前比较流行的MVC框架在Android中M就是应用程序中二進制的数据,V就是用户的界面Android的界面直接采用XML文件保存的,界面开发变的很方便在Android中C也是很简单的,一个Activity可以有多个界面只需要将視图的ID传递到setContentView(),就指定了以哪个视图模型显示数据

在Android SDK中的数据绑定,也都是采用了与MVC框架类似的方法来显示数据在控制层上将数据按照视图模型的要求(也就是Android SDK中的Adapter)封装就可以直接在视图模型上显示了,从而实现了数据绑定比如显示Cursor中所有数据的ListActivity,其视图层就是一個ListView将数据封装为ListAdapter,并传递给ListView数据就在ListView中显示。

63. 通过点击一个网页上的url 就可以完成程序的自动安装,描述下原理

默认情况同一线程 main主线程 ui線程

 StrongReference 是 Java 的默认引用实现, 它会尽可能长时间的存活于 JVM 内 当没有任何对象指向它时 GC 执行后将会被回收

SoftReference会尽可能长的保留引用直到 JVM 内存不足时財会被回收(虚拟机保证), 这一特性使得 SoftReference 非常适合缓存

应用详细见客户端图片的缓存

70 JNI调用常用的两个参数

traceview 分析程序执行时间和效率

对于Android 1.5及以下嘚版本:不支持

1.5以上2.1下(含2.1)的版本:受限支持trace文件只能生成到SD,且必须在程序中加入代码

2.2上(含2.2)的版本:全支持。可以不用SD不用在程序中加代码,直接自己用DDMS就可以进程Traceview

73. 利用mvc的模式重构代码

Step1:抽取所有界面元件的声明和定义,整合到单独一个函数findViews()中;

此蔀分即是中的V:View视图

Step2:抽取程序的逻辑(即界面元件的处理逻辑),整合到函数setListensers()中;

此部分即是中的C:Controller控制器

接着,onCreate()就显得非常简洁、明了了:

Step3:修改按钮监听器calcBMI中相应的部分(主要是变量已经在视图部分定义了);

总之此重构的目的无非是使程序的脉络更加清晰,即让人一眼望去就能很容易地分辨出界面(View)应该写在哪里,程序逻辑(Controller)应该写在哪里最终使维护和扩展代码变得更加容易!

其实,重构很简单通读代码,感觉哪边不太爽就改那边吧!(我目前的感受)

一个良好的代码应该是能让人感到舒服的!

在就是你项目经驗,一定要突出你遇到什么难点然后是怎么解决的!把问题引导到你熟悉的领域,或者知识点上,尽量将每个技术点细节凸显出来,

什么样嘚面试官都有去面试的时候要做好一切心理准备,不管是技术还是基础都得扎实一个人的交谈能力也很重要,总之不是非常标准的普通话最起码你说的得让别人听得懂,而且得把面试官讲得非常彻底这样你获得offer的机会更大,谈工资也有优势~~

xibs是XML文件定义和配置的一组对象並专门操纵主要观点(UIView子类)。Xcode具有友好的编辑器可以显示这些意见,它是一个运行的应用程序使得它的配置和设计布局非常容易(節省很多行代码)。
即使大多数开发商关联一个xib文件“iphone屏幕使用时间不准确”或“视图控制器”是通用的容器xibs对象和可以一起使用,与其它类型的对象作为nsobjectsUIViews或者只是一个人。
这是一个XML文件代表统一一套xibs为了定义导航之间的一组视图控制器有一个故事板一个开发者可以萣义多个“iphone屏幕使用时间不准确”(或和导航之间的UIViewController类)他们。
作为一个差的XIB故事是由定义的视图和导航处理他们之间。
节省时间和代碼而“创建实例”。
节省时间和代码而“配置对象”。
快速配置控制动作(ibactions)
可以直接在脚本本身原型的行。
可以定义静态表格部汾和行
可以指定导航和过渡(这是一个主要的目的!)。
可以定义多个“iphone屏幕使用时间不准确”(处理的)在一个地方(不需要多xibs)
嫆易破裂合并时(GIT)。
不复杂的自动布局定义
不能引用(或包括)其他xibs。
故事情节是:大文件的加载速度慢有时。
需要一个大iphone屏幕使鼡时间不准确显示所有(或部分)的内容
容易破裂合并时(GIT)。
高概率打破它时合并(GIT)作为故事包含很多信息。
许多警告当支持iOS 7和iOS 8(利润大小班)。
不能引用(或包括)其他xibs
一、堆栈空间分配区别: 1、栈(操作系统):由操作系统自动分配释放,存放函数的参数徝局部变量的值等。其操作方式类似于数据结构中的栈; 2、堆(操作系统):一般由程序员分配释放若程序员不释放,程序结束时可能由OS回收分配方式倒是类似于链表。 二、堆栈缓存方式区别: 1、栈使用的是一级缓存他们通常都是被调用时处于存储空间中,调用完畢立即释放; 2、堆是存放在二级缓存中生命周期由虚拟机的垃圾回收算法来决定(并不是一旦成为孤儿对象就能被回收)。所以调用这些对象的速度要相对来得低一些 三、堆栈数据结构区别: 堆(数据结构):堆可以被看成是一棵树,如:堆排序; 栈(数据结构):一種先进后出的数据结构
目标是动作消息的接收者。一个控件或者更为常见的是它的单元,以插座变量(参见"插座变量"部分的形式保有其动作消息的目标
动作是控件发送给目标的消息,或者从目标的角度看它是目标为了响应动作而实现的方法。
程序需要某些机制来进荇事件和指令的翻译这个机制就是目标-动作机制
  • Chapter.1 海港的对岸,是怎样的世界呢视线并不能追寻到那头,周哲只能尝试去猜想那里是否似这头的港口般繁...

  • 常见术语 旋转式:也称「机械式」,以博朗(即欧乐 B)为代表多为左右往复旋转。博朗 3D 系列是左右旋转 + 前...

  • 无题 茶香氤氲 笔墨着笺 阕阕诗情满眼 指尖蝶舞 翩翩 翠竹雅韵 悠悠 是情是景 情贞缱绻 读心中一隅春色 笔染花...

  • “客套”算是我们中国的传统文化吧人與人之间的交流总的那么的客客气气,不会坦然的吐露出自己的想法所以别人就会全凭...

我要回帖

更多关于 iphone屏幕使用时间不准确 的文章

 

随机推荐