02 2014 档案
摘要:#pragma mark init方法内部默认会调用initWithFrame:- (id)initWithFrame:(CGRect)frame{ self = [super initWithFrame:frame]; if (self) { // 里面的图片居中 self.imageView.contentMode = UIViewContentModeCenter; // 里面的文字居中 self.titleLabel.textAlignment = NSTextAlignmentCenter; // 文字字体 self.titleLabel.font = [UIFont systemF
阅读全文
摘要:简单来说就是:一级一级的找到响应的视图,如果没有就传给UIWindow实例和UIApplication实例,要是他们也处理不了,就丢弃这次事件...对于IOS设备用户来说,他们操作设备的方式主要有三种:触摸屏幕、晃动设备、通过遥控设施控制设备。对应的事件类型有以下三种:1、触屏事件(Touch Event)2、运动事件(Motion Event)3、远端控制事件(Remote-Control Event)响应者链条概念:iOS系统检测到手指触摸(Touch)操作时会将其打包成一个UIEvent对象,并放入当前活动Application的事件队列,单例的UIApplication会从事件队列中取
阅读全文
摘要:1. 多态性多态性是个生物名词,用来表示生物体在生命周期中的不同形态,用在编程语言中则表示相同的方法名,但是却有不同的实现方式。或者说相同的名字,不同的类。我们来看一个书上的示例:#import//定义类A@interfaceA:NSObject-(void)print@end@implementation-(void)print{NSLog(@"thisisClassA");}@end//定义类B@interfaceB:NSObject-(void)print@end@implementation-(void)print{NSLog(@"thisisClassB
阅读全文
摘要:在 UIView 中有一个autoresizingMask的属性,它对应的是一个枚举的值(如下),属性的意思就是自动调整子控件与父控件中间的位置,宽高。enum { UIViewAutoresizingNone = 0, UIViewAutoresizingFlexibleLeftMargin = 1 << 0, UIViewAutoresizingFlexibleWidth = 1 << 1, UIViewAutoresizingFlexibleRightMargin = 1 << 2, UIViewAutoresizingFlexibleTopMargi
阅读全文
摘要:内购的五种产品类别•非消耗品(Nonconsumable)买了就有,头衔,功能–指的是在游戏中一次性购买并拥有永久访问权的物品或服务。非消耗品物品可以被用户再次下载,并且能够在用户的所有设备上使用•消耗品(Consumable),买了就用,用了就没–专为支持可消耗的物品或服务设计的,消耗品购买不可被再次下载,根据其特点,消耗品不能在用户的设备之间跨设备使用,除非自定义服务在用户的账号之间共享这些信息••以下三种类别在iBooks中使用,目前iBooks不支持大陆市场•ISBN:每本书的一个ID–免费订阅(Free subscriptions)–自动续费订阅(Auto-renewing subs
阅读全文
摘要:苹果公司不可能让其他人获得个人终端的唯一标识符,所以一个终端给另一个终端发送消息,必须经过苹果的APNS(Apple Push Notification Service)....而且苹果为了防止苹果用户的唯一标示符泄露,会更新..我们在APNS存储的唯一标识符1. 需要告诉苹果的服务器,当前应用程序需要接收远程通知2. 接收到苹果返回的设备代号3. 本地保存的设备代号和接收到得苹果服务器返回的设备代号对比,当Token发生变化时,提交给服务器保存新的Token4. 将Token保存至系统偏好#import "ITAppDelegate.h"@implementation I
阅读全文
摘要:第一步:创建本地推送// 创建一个本地推送UILocalNotification *notification = [[[UILocalNotification alloc]init] autorelease];//设置10秒之后NSDate *pushDate = [NSDate dateWithTimeIntervalSinceNow:10];if (notification != nil) { //设置推送时间notification.fireDate = pushDate; //设置时区notification.timeZone = [NSTimeZone defaultTimeZone
阅读全文
摘要:必须要有一个99美元的账号,然后登陆下面这个网站首先,登录到http://developer.apple.com/devcenter/ios/index.action,如果已经购买了iPhone Develop Program(iDP),登录进去后,页面右上角会看到如下图所示的页面:点击第一项:iOS Provisioning Portal,然后会看到下面的页面:点击进入Certificates,然后看到如下所示的页面:点击图中的click here to download now,这会下载下来一个AppleWWDRCA.cer文件,这是调试以及发布iOS应用必须的一个文件,这个文件只要下载一
阅读全文
摘要:KVC(key value coding)我们一般是通过调用set方法或属性的点语法来直接更改对象的状态,即对象的属性值,比如[stu setAge:10]; stu.age = 9;lKVC,它是一种间接更改对象状态的方式,其实现方法是使用字符串来描述对象需要更改的属性。KVC中的基本调用包括valueForKey:和setValue:ForKey:,以字符串的形式向对象发送消息l这里以Student和Card为例子KVC可以对对象进行批量更改l例如,同时获取Student的age和nameNSArray *keys = [NSArray arrayWithObjects:@"na
阅读全文
摘要:/*******************************快速排序start**********************************///随即取当前取第一个,首先找到第一个的位置,然后分成left和right两组子集,分别对left和right继续执行分割(同上操作)-(void)QuickSort:(NSMutableArray*)listStartIndex:(NSInteger)startIndexEndIndex:(NSInteger)endIndex{if(startIndex>=endIndex)return;NSNumber*temp=[listobjec
阅读全文
摘要:一、imageNamed——方法介绍imageNamed:是UIImage的一个类方法,它做的事情比我们看到的要稍微多一些。它的加载流程如 下:1、系统回去检查系统缓存中是否存在该名字的图像,如果存在则直接返回。2、如果系统缓存中不存在该名字的图像,则会先加载到缓存中,在返回该对象。 观察上面的操作我们发现系统会缓存我们使用imageNamed:方法加载的图像时候,系统会自动帮我们缓存。这种机制适合于那种频繁 用到界面贴图累的加载,但如果我们需要短时间内频繁的加载一些一次性的图像的话,最好不要使用这种方法。二、imageWithContentsOfFile:和initWithContentsO
阅读全文
摘要:iOS的应用程序的生命周期,还有程序是运行在前台还是后台,应用程序各个状态的变换,这些对于开发者来说都是很重要的。 iOS系统的资源是有限的,应用程序在前台和在后台的状态是不一样的。在后台时,程序会受到系统的很多限制,这样可以提高电池的使用和用户体验。//开发app,我们要遵循apple公司的一些指导原则,原则如下:1、应用程序的状态状态如下:Not running 未运行 程序没启动Inactive 未激活 程序在前台运行,不过没有接收到事件。在没有事件处理情况下程序通常停留在这个状态Active 激活 程序在前台运行而且接收到了事件。这也是前台的一个...
阅读全文
摘要:Run LoopsRun loops是线程相关的的基础框架的一部分。一个run loop就是一个事件处理的循环,用来不停的调度工作以及处理输入事件。使用run loop的目的是让你的线程在有工作的时候忙于工作,而没工作的时候处于休眠状态。Run loop的管理并不完全自动的。你仍然需要设计你的线程代码在合适的时候启动run loop并正确响应输入事件。Cocoa和Core Fundation都提供了run loop objects来 帮助配置和管理你线程的run loop。你的应用程序不需要显式的创建这些对象(run loop objects);每个线程,包括程序的主线程都有与之对应的run
阅读全文
摘要:iOS平台内存常见问题作为iOS平台的开发者,是否曾经为内存问题而苦恼过?内存莫名的持续增长,程序莫名的crash,难以发现 的内存泄漏,这些都是iOS平台内存相关的常见问题;本文将会详细介绍iOS平台的内存管理机制,autorelease机制和内存的使用陷阱,这些将会 解决iOS平台内存上的大部分问题,提高了程序的稳定性;1 iOS平台内存管理介绍iOS平台的内存管理采用引用计数 的机制;当创建一个对象时使用alloc或者allWithZone方法时,引用计数就会+1;当释放对象使用release方法时,引用计数就是-1; 这就意味着每一个对象都会跟踪有多少其他对象引用它,一旦引用计数为0,
阅读全文
摘要:在iOS开发过程中,不管是做什么应用,都会碰到数据保存的问题。将数据保存到本地,能够让程序的运行更加流畅,不会出现让人厌恶的菊花形状,使得用户体验更好。下面介绍一下数据保存的方式:1.NSKeyedArchiver:采用归档的形式来保存数据,该数据对象需要遵守NSCoding协议,并且该对象对应的类必须提供encodeWithCoder:和initWithCoder:方法。前一个方法告诉系统怎么对对象进行编码,而后一个方法则是告诉系统怎么对对象进行解码。例如对Possession对象归档保存。定义Possession:@interface Possession:NSObject{//遵守NSC
阅读全文
摘要:Objective-C的对象在内存中是以堆的方式分配空间的,并且堆内存是由你释放的,即release栈由编译器管理自动释放的,在方法中(函数体)定义的变量通常是在栈内,因此如果你的变量要跨函数的话就需要将其定义为成员变量。1.栈区(stack):由编译器自动分配释放,存放函数的参数值,局部变量等值。其操作方式类似于数据结构中的栈。2.堆区(heap):一般由程序员分配释放,若程序员不释放,则可能会引起内存泄漏。注堆和数据结构中的堆栈不一样,其类是与链表。操作系统iOS中应用程序使用的计算机内存不是统一分配空间,运行代码使用的空间在三个不同的内存区域,分成三个段:“text segment“,“
阅读全文
摘要:1. 变量的@public @private @package @protected 声明有什么含义?@public 可以被所有的类访问@private 只有该类的方法可以访问,子类的都不能访问@protected 该类和所有类的方法可以直接访问@package 一个@package实例变量在实现这个类的可执行文件镜像中实际上是@public的,但是在外面就是@private,,Objective-C中的 @package与C语言中变量和函数的private_extern类似。任何在实现类的镜像之外的代码想使用这个实例变量都会引发link error,这个类型最常用于框架类的实例变量,使用@p
阅读全文
摘要:1.在ARC项目中使用非ARC框架或者类库IOS 4引入了Automatic Reference Count(ARC),编译器可以在编译时对obj-c对象进行内存管理。之前,obj-c的内存管理方式称作引用计数,就是obj-c对象每被”使用”一次,引用计数+1,当引用计数为0时,系统会回收内存.用程序语言表达,就是allco的要release,retain/copy的要release.还有某些容器add的,也要release等等.那么在现有的ARC项目中,如何引用非ARC的第三方框架或者类库呢?答案很简单,只需在TARGETS里的Build Phases中,找到 Compile Sources
阅读全文
摘要:1.使用前 需要导入Social.framework 框架2.实例代码(新浪微博为例)- (IBAction)shejiaoBtn { // 判断服务器是否可用 if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeSinaWeibo]) { // 实例化试图控制器 SLComposeViewController *controller = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeSinaWeibo]; .
阅读全文
摘要:单例模式的意思就是只有一个实例。单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类。1.单例模式的要点: 显然单例模式的要点有三个;一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。2.单例模式的优点: 1.实例控制:Singleton 会阻止其他对象实例化其自己的 Singleton 对象的副本,从而确保所有对象都访问唯一实例。 2.灵活性:因为类控制了实例化过程,所以类可以更加灵活修改实例化过程IOS中的单例模式 在objective-c中要实现一个单例类,至少需要做以下四个步骤: 1、为单例对象实...
阅读全文
摘要:如今二维码随处可见,无论是实物商品还是各种礼券都少不了二维码的身影。而手机等移动设备又成为二维码的一个很好的应用平台,不管是生成二维码还是扫码二维码。下面介绍一下如何在苹果iOS设备上使用二维码:1. 二维码的生成#import "NSString+Helper.h"// 加入框架#import @implementation NSString (Helper)/**返回当前字符串对应的二维码图像二维码的实现是将字符串传递给滤镜,滤镜直接转换生成二维码图片*/- (UIImage *)createQRCode{ // 1. 实例化一个滤镜 CIFilter *filter
阅读全文
摘要:XML & JSON 简介•JSON–作为一种轻量级的数据交换格式,正在逐步取代XML,成为网络数据的通用格式–基于JavaScript的一个子集–易读性略差,编码手写难度大,数据量小–JSON格式取代了XML给网络传输带来了很大的便利,但是却没有了XML的一目了然,尤其是JSON数据很长的时候,我们会陷入繁琐复杂的数据节点查找中•JSON是轻量级的数据交换格式,正逐步取代XML,成为通用网络数据格式•使用类方法JSONObjectWithData:options:error:可以将接收到的JSON数据反序列化为NSArray或NSDictionary等对象•XML–可扩展标记语言–用
阅读全文
摘要:UIDynamic中的三个重要概念Dynamic Animator:动画者,为动力学元素提供物理学相关的能力及动画,同时为这些元素提供相关的上下文,是动力学元素与底层iOS物理引擎之间的中介,将Behavior对象添加到Animator即可实现动力仿真Dynamic Animator Item:动力学元素,是任何遵守了UIDynamicItem协议的对象,从iOS 7.0开始,UIView和UICollectionViewLayoutAttributes默认实现该协议。如果自定义的对象实现了该协议,即可通过Dynamic Animator实现物理仿真UIDynamicBehavior:仿真行为
阅读全文
摘要:核心动画•Core Animation是一组非常强大的动画处理API,使用它能做出非常炫丽的动画效果,而且往往是事半功倍!•使用它需要先添加QuartzCore.framework和引入对应的框架•开发步骤:1.初始化一个动画对象(CAAnimation)并设置一些动画相关属性2.CALayer中很多属性都可以通过CAAnimation实现动画效果,包括:opacity、position、transform、bounds、contents等(可以在API文档中搜索:CALayer Animatable Properties)3.添加动画对象到层(CALayer)中,开始执行动画4.通过调用CA
阅读全文
摘要:从本质上说,面向过程和面向对象是一个古已有之的认识论的问题。 面向过程在面向过程的眼中,世界的一切都不是孤立的,它们相互紧密联系在一起,缺一不可,相互影响,相互作用,并形成一个个具有严格因果律的小系统;而更多的小系统组成了更大的系统,所有小系统之间的联系也是紧密和不可分割的。面向过程方法认为我们的世界是由一个个相互关联的小系统组成的,每个小系统都有着明确的开始和明确的结束,开始和结束之间有着严谨的因果关系。只要我们将这个小系统中的每一个步骤和影响这个小系统走向的所有因素都分析出来,我们就能完全定义这个系统的行为。通常,面向过程的分析方法是找到过程的起点,然后顺藤摸瓜,分析每一个部分,直至达到过
阅读全文
摘要:手势识别——Gesture Recognizer•iOS3.2版本之后,苹果推出了手势识别(Gesture Recognizer),其目的是:–简化开发者的开发难度–统一用户体验••iOS目前支持的手势识别–UITapGestureRecognizer(点按)–UIPinchGestureRecog...
阅读全文
摘要:UITouchUITouch类中包含五个属性•window:触摸产生时所处的窗口。由于窗口可能发生变化,当前所在的窗口不一定是最开始的窗口•view:触摸产生时所处的视图。由于视图可能发生变化,当前视图也不一定时最初的视图•tapCount:点按操作和鼠标的单击操作类似,tapCount表示短时间内点按屏幕的次数。因此可以根据tapCount判断单击、双击或更多的点按•timestamp:时间戳记录了触摸事件产生或变化时的时间,单位是秒•phase:触摸事件在屏幕上有一个周期,即触摸开始、触摸点移动、触摸结束,还有中途取消。通过phase可以查看当前触摸事件在一个周期中所处的状态。phase是
阅读全文
摘要:•UIKit可识别三种类型的输入事件:–触摸事件–运动(加速计)事件–远程控制事件IKit框架将触击信息封装为一个UIEvent对象,并派发给恰当的视图(有关UIKit如何将事件递送给您的视图的详细解释,请参见“事件的传递”部分)。 视图的事件处理方法可以通过下面的方式来响应事件: 调整视图或其子视图的属性变量(边框、边界、透明度等)。 将视图(或其子视图)标识为需要修改布局。 将视图(或其子视图)标识为布局需要重画。 将数据发生的变化通报给控制器。 当然,上述的哪些事情需要做及调用什么方法来完成是由视图来决定的。 如果视图被标识为需要重新布局,UIKit就调用视图的layoutSubview
阅读全文
摘要:三种:•NSThread:–优点:NSThread 比其他两个轻量级,使用简单–缺点:需要自己管理线程的生命周期、线程同步、加锁、睡眠以及唤醒等。线程同步对数据的加锁会有一定的系统开销•NSOperation:–不需要关心线程管理,数据同步的事情,可以把精力放在自己需要执行的操作上–NSOperation是面向对象的•GCD:–Grand Central Dispatch是由苹果开发的一个多核编程的解决方案。iOS4.0+才能使用,是替代NSThread, NSOperation的高效和强大的技术–GCD是基于C语言的无论使用哪种多线程技术都可以使用[NSThread currentThrea
阅读全文
摘要:(比如游戏升级,传进来升级信息后,好多东西都要更改,就要用到工厂模式)在简单工厂中,我们的工厂类一次只可以处理一类产品。那么如果我们想处理多类产品,简单工厂是满足不了的。必须要用抽象工厂设计模式。我们先从概念上来了解下什么是抽象工厂设计模式:•1、提供一系列相互依赖对象的创建工作•2、封装对象常规的创建方法(new)•3、提供统一调用访问方法的方式•4、避免调用访问方法和具体对象创建工作的紧耦合这些概念性的东西看起来比较抽象,直接上图如上图所示,我们如何去更好的理解抽象工厂,首先 我们要分清在这个模式中的几类角色。有抽象工厂,实体工厂,抽象产品,实体产品,客户(调用代码的类)。•抽象工厂设计模
阅读全文
摘要:对象所有权与引用计数(转)当一个所有者(owner,其本身可以是任何一个Objective-C对象)做了以下某个动作时,它拥有对一个对象的所有权(ownership):1. 创建一个对象。包括使用任何名称中包含“alloc”、“new”、或者“copy”的方法。2. 保留(retain)一个对象。一个对象可以有多个所有者,一个所有者也可以拥有多个对象。相应的,引用计数增减的基本规则是:1.当所有者创建一个对象时,该对象的引用计数为1。2.当所有者保留它时,该对象的引用计数加1。3.当所有者释放(release)它时,该对象的引用计数减1。与此相关的,当一个所有者对于一个对象的引用计数的增减总计
阅读全文
摘要:1、Model不允许和Controller,View打交道。也就是Model根本不知道谁会用自己,Model中不能有任何对 Controller和View的引用。正所谓:Don't call me, I will call you.就是给Model设计说的。我们再想想,在一般程序中Model到处被拿去用,它要维护到底谁用真的很难。那你会问:兄弟,那当Model的数据 变了,我怎么通知视图更新呢?这里常用的机制就是广播模式,或者电台模式,或者事件机制都行。在iOS中有两种支持机制:Notification和 KVO(Key-Value Observing)。这两种东西原理差不多,KVO是
阅读全文
摘要:指针是没什么类型分的,但是指针指向的内存存储的数据就有类型,指针的类型就是指向内存数据的类型不告诉系统指向的是什么类型,系统就不知道该去多少连续内存作为一个数据,不同的数据在内存中存储的位数不同.16位int 2 字节long 4 字节float 4 字节dobule 8 字节char 1 字节32位int 4 字节long 4 字节float 4 字节dobule 8 字节char 1 字节
阅读全文
摘要:ARC是编译层面的东西,垃圾回收是程序运行以后的机制,两者不可混为一谈苹果觉得垃圾回收这种严重影响电源使用效率的特性,同移动设备天生的实时性是相冲突的。但是在iOS 5当中苹果引入了自动内存管理机制,称作ARC。
阅读全文
摘要:frame指的是:该view在父view坐标系统中的位置和大小。(参照点是父亲的坐标系统)它的坐标原点是随着父View位置的改变而改变的bounds指的是:该view在本身坐标系统中 的位置和大小。(参照点是本身坐标系统)它的坐标原点是相对于整个系统的坐标的,不会随着父view 的改变而改变
阅读全文
摘要:OS消息推送的工作机制可以简单的用下图来概括:Provider是指某个iPhone软件的Push服务器,APNS是Apple Push Notification Service的缩写,是苹果的服务器。上图可以分为三个阶段:第一阶段:应用程序把要发送的消息、目的iPhone的标识打包,发给APNS。第二阶段:APNS在自身的已注册Push服务的iPhone列表中,查找有相应标识的iPhone,并把消息发送到iPhone。第三阶段:iPhone把发来的消息传递给相应的应用程序,并且按照设定弹出Push通知。从上图我们可以看到:1、应用程序注册消息推送。2、iOS从APNS Server获取devi
阅读全文
摘要:委托代理:委托代理(degegate)顾名思义,把某个对象要做的事情委托给别的对象去做。那么别的对象就是这个对象的代理,代替它来打理要做的事。反映到程序中, 首先要明确一个对象的委托方是哪个对象,委托所做的内容是什么。委托机制在很多语言中都用到的,这只是个通用的思想,网上会有很多关于这方面的介绍。 那么在苹果开发过程中,用到委托的程序实现思想如下,我主要拿如何在视图之间传输信息做个例子。譬如:在两个页面(UIView视 图对象)实现传值,用委托(delegate)可以很好做到。 代理设计模式1.使用场合:1> 当A对象发生了一些事情,想告诉B对象,就让B对象成为A对象的代理2> B
阅读全文