摘要:
如何将数据持久化存储在iOS系统上,Cocoa提供了4种机制:1 NSUserdefaults主要用来存储一些短小的信息,例如应用程序设置和属性及用户数据。2 属性列表以列表的形式把数据存储到磁盘上。属性列表类包括NSArray, NSDictionary, NSString, NSNumber, NSDate, NSdata。这些类型的数据可用直接调用writeToFile和相应的加载函数来存储到磁盘和从磁盘读出。相应的加载函数有:arrayWithContentsOfFile:dictionaryWithContentsOfFile:stringWithContentsOfFile:dat 阅读全文
摘要:
委托(delegate)是一种对象,另一个类的对象会要求委托对象执行它的某些操作。创建一个“NSObject”类别称为创建一个非正式协议。任何实现“NSObject”类别中的方法的类的对象都可以成为委托对象。因为在Objective-C中所有的类都是NSObject的子类。当你想要向委托对象发送消息时,最好先检查该对象是否理解你将要发送的消息。if ([delegate respondsToSelector: @selector(...)]{ [delegate ...];}正式协议:通过在@protocol部分列出一组方法名来定义一个正式协议。通过在@interface声明中的类名之后列出. 阅读全文
摘要:
类别是个很伟大的概念。使用类别可以为任何一个类添加新方法,包括那些你没有源代码的方法。这非常方便。想要为某个类添加新方法时,我们通常的做法是创建子类。但有时,子类不方便。你可能不能创建一个子类的对象。你可能使用的是框架和工具包,因此无法处理新类的对象。类别的声明:@interface UIImage (ImageTransform)-(UIimage *)transformToSize:(NSSize *)size@end现有的类位于@interface关键字之后,其后是位于圆括号中的一个新名称。类的名称可是任意,这个名称大概没有什么实际作用吧,仅仅是一个标示符。当然具有实际意义的标示符可以指 阅读全文
摘要:
@property预编译指令的作用是自动声明属性的setter和getter方法有时候需要声明相应的实例变量什么时候需要声明实例变量呢?看下面一个例子:@interface Foo: NSObject@property t;@@implmentation Foo- (NSInteger)t{ ...}- (void)setT:(NSInteger)newT{ ...}@end相应的setter, getter方法怎么实现呢? 这里没有用@systhesize自动合成如果是这样的实现- (void)setT:(NSInteger)newT{ self.t = newT;}那么这个函... 阅读全文
摘要:
流程:1 开发好要发布的程序 -- 需要在程序中包含符合要求规格的icon文件https://developer.apple.com/library/ios/#qa/qa2010/qa1686.html2 iTune上注册APP,这一步需要Apple developer IDhttps://developer.apple.com/devcenter/ios/index.action登录之后进入 iTunes Connect登录之后选择管理你的应用程序选择添加新的应用程序首先需要填写如下信息App Name必须是App Store未使用的,你填入的时候,系统会检查。基于这一点可以考虑把第二步和第 阅读全文
摘要:
xmpp文件传输主要有两种方法:1 socks5 bytestreams 对应的协议是XEP-00652 In-Band Bytestreams(ibb) 对应的协议是XEP-0047socks5 Bytestreams方法的优点是效率高,但是跨网段传输时需要一个文件代理。像openfire服务器就自带有文件代理,所以这个容易实现。同网段传输可以直接连接,一般的实现是发起端建一个socks5服务。实际使用该方法时还需要使用XEP-0095协议来初始化流。XMPPFramework未包含XEP-0095这个协议的实现,需要自己定义。In-Band Bytestreams的优点是实现简单,但是效率 阅读全文
摘要:
相关的配置项是:选择左下角的“编辑属性”再选择系统属性xmpp.proxy.externalip这个属性就是指定文件代理的地址如果没有这个属性,则手动添加正确的设置是:设置为公共ip或一个公共域名(公共:就是整个因特网可见的, 如果是一个内网ip,那么不同网段的客户端就没法连接到这个ip),看网上的一些说法是设置为proxy.domain,这要保证你的这个域名proxy.domain是公共的。否则直接设置为服务器的ip。当然好的做法应该是保证proxy.domain是公共的(不过涉及要域名的申请)。如果没有设置这个选项,那么查询代理时,返回的地址就是127.0.0.1。设置不正确的话,不同网段 阅读全文
摘要:
XMPPFramework中的线程架构、线程安全、内存管理Version 3的XMPPFramework带来了大量的并行性和极大的性能提升。如何利用呢?Grand Central Dispatch编写多线程代码历来是个困难的并且容易引起问题的事情。GCD技术在很大程度上使编写多线程代码变得容易。GCD技术是苹果的一项新技术。这个技术让我们不用去考虑如何创建一个线程、该创建多少个线程,不用去关心线程数对性能的影响。一方面,创建线程是件很昂贵的操作。慢并且开销大。太多的线程切换也浪费CPU时间。另一方面,系统也不会给出一个简单的的答案告诉你该创建多少个线程才是最合适的。这些都是和系统的负载有关的, 阅读全文
摘要:
1 带内注册(In-band registration)的概念带内注册指的是未在你的服务器上开通账号的用户可以通过xmpp协议注册新账号。相反的概念是带外注册(out-of-band registration),例如你必须到某个指定的web页面进行注册。如果服务器允许带内注册,那么我们就可以通过自己开发的客户端注册新账号。与带内注册相关的协议是XEP-0077。2 使用XMPPFramework进行带内注册XMPPStream.h中声明了进行简单带内注册(提供用户名和密码进行注册)的函数- (BOOL)registerWithPassword:(NSString *)password erro 阅读全文
摘要:
Popover 与 Modal view (模态视图)Popover view: 点击视图外的地方,popover view就会消失。popover view的显示:PopoverViewController *controller = [[self storyboard] instantiateViewControllerWithIdentifier:@"PopoverView"]; [controller setDelegate:self]; UIPopoverController *popoverController = [[U... 阅读全文