
iOS开发
文章平均质量分 66
wcxdell
研究僧一名
展开
-
[iOS]modalPresentationStyle和modalTransitionStyle
首先说一下modalPresentationStyle。当你用present的方式呈现一个viewController的时候,可以设置将要弹出的viewcontroller的展示样式,对于iPhone和iTouch来说,一般主要就是三种。先看一下所有的。typedef NS_ENUM(NSInteger, UIModalPresentationStyle) { UIMo原创 2017-01-24 12:16:57 · 5943 阅读 · 0 评论 -
[iOS]SDWebImage 源码阅读(三)下载
下载部分从这里开始 SDWebImageDownloaderOptions downloaderOptions = 0; if (options & SDWebImageLowPriority) downloaderOptions |= SDWebImageDownloaderLowPriority; if (opt原创 2016-09-14 18:06:59 · 832 阅读 · 0 评论 -
[iOS]SDWebImage 源码阅读(二)缓存
缓存部分从这部分开始 operation.cacheOperation = [self.imageCache queryDiskCacheForKey:key done:^(UIImage *image, SDImageCacheType cacheType) {我们进到里面看看SDWebImage的缓存是怎么做的。 if (!doneBlock) { re原创 2016-09-12 21:14:31 · 485 阅读 · 0 评论 -
[iOS]SDWebImage 源码阅读(一)
这是我看的第四份比较著名的源码了,看了不只一遍,因为里面蕴含的知识太多了,而且刚开始也有一些地方不懂,不过经过不断的查资料等等终于是差不多理解了,下面就把我看的地方记录下来,希望能对正在看这份代码的人有所帮助,我会尽量的每一处地方都讲到。老规矩,按照一次代码调用的全程来分析。首先看最常用的方法/** * Set the imageView `image` with an `url`.原创 2016-09-12 19:43:16 · 528 阅读 · 8 评论 -
iOS设计模式(八) 责任链模式
iOS中的响应链就属于责任链模式。响应链是如果当前视图不能响应这个事件,就传给它的superview,最后是UIWindow和UIApplication。如果都不能响应,则事件被丢弃。责任链模式则更为广泛。可以自己设置下一个响应者是谁和响应动作。原创 2016-07-08 14:45:46 · 483 阅读 · 0 评论 -
iOS设计模式(七) 迭代器模式
什么是迭代器模式迭代器提供了一种顺序访问聚合对象(集合)中元素的方法,而无需暴露结构的低层表示和细节。遍历集合中元素的职能从集合本身转移到迭代器对象。迭代器定义了一个用于访问集合元素并记录当前元素的接口。不同的迭代器可以执行不同的遍历策略。下面就是一种系统自带的迭代器模式。 NSArray *array = @[@1,@2,@3]; NSEnumerat原创 2016-07-07 15:16:59 · 421 阅读 · 0 评论 -
iOS设计模式(六) 观察者模式
在iOS中,有两种技术是属于观察者模式的。它们分别是通知和KVO。通知注册通知 NSNotificationCenter *notificantionCenter = [NSNotificationCenterdefaultCenter]; [notificantionCenter addObserver:selfselector:@select原创 2016-07-01 15:07:01 · 328 阅读 · 0 评论 -
iOS设计模式(十) 享元模式
这个模式很简单,就是一个对象的共享使用。比如要在屏幕上画100朵花,但是只需要创建一个实例就够了。不同的是花的位置。 和tableView的重用有点类似。原创 2016-07-12 10:18:59 · 462 阅读 · 0 评论 -
iOS设计模式(五) 中介者模式
其实就是需要一个管理类来集中管理各式各样的类的调度操作。多个类之间的各种关系可以通过一个管理类的服装调度。UINavigationController就是一种中介者模式的实现。原创 2016-06-30 10:54:42 · 419 阅读 · 0 评论 -
iOS设计模式(九) 命令模式
可以把一系列动作封装成一个命令,在用户不需要知道其实现细节,使用细节的情况下就可以调用。一般在想让应用程序支持撤销与恢复的情况下使用这一模式。在OC中NSInvocation和NSUndoManager是这个模式的两个实现。NSInvocation使用方法: NSMethodSignature *signature = [[self class] instance原创 2016-07-11 14:43:10 · 968 阅读 · 0 评论 -
iOS设计模式(九) 模板方法模式
简单的说,就是一个父类,定义了一套操作,并实现不变的部分。然后把可变的部分留给子类来实现。通常来说只调用父类的方法并不能完成操作,所以必须要子类继承并且重写没有实现的类。原创 2016-07-11 10:46:48 · 413 阅读 · 0 评论 -
iOS设计模式(四) 单例模式
这个模式是经常使用的,了解的比较多,就不详细写了。+ (AccountManager *)sharedManager { static AccountManager *sharedAccountManagerInstance = nil; static dispatch_once_t predicate; dispatch_onc原创 2016-06-28 18:55:34 · 291 阅读 · 0 评论 -
[iOS]NSOperation的start与main,并发与非并发。
NSOperation有一个属性,isConcurrent.Operation queues usually provide the threads used to run their operations. In OS X v10.6 and later, operation queues use the libdispatch library (also known as Grand Ce原创 2016-08-23 20:40:57 · 5187 阅读 · 0 评论 -
[iOS]一个动态方法解析的小demo
+ (BOOL)resolveInstanceMethod:(SEL)sel{ NSString *str = NSStringFromSelector(sel); if ([str isEqualToString:@"haha"]) { class_addMethod(self, sel, (IMP)test, "v@:"); return YES原创 2016-07-13 15:36:36 · 591 阅读 · 0 评论 -
[iOS]MJExtension 源码阅读
最近这几天看了MJExtension的源码,虽然不是每一行代码都读了,但是核心功能部分的代码都看了一遍,大致知道了实现原理,并且学习到了一些新的知识。在这里做一下记录。首先根据代码从头到尾的运行解释一下。只做iOS的同学可能不知道程序是在哪里执行的,并没有写在ViewController和AppDelegate里面,而是写在了main文件里面,并且用的是C函数。原创 2016-06-07 16:06:48 · 2710 阅读 · 0 评论 -
[iOS]UIFont的lineHeight与pointSize
写这篇文章的初衷是由于我有一次想获取一个font的字体大小时使用了UIFont的lineHeight属性,结果是比字体的大小要大了一部分,然后经过查阅各种资料,发现了原因。首先我们来看一看UIFont的API里面有哪些属性:// Font attributes@property(nonatomic,readonly,strong) NSString *familyName;@prope原创 2016-10-23 21:27:53 · 13157 阅读 · 2 评论 -
[iOS]iOS结合OpenCV做视频流处理或人脸识别
下面是做好的demo的样子。然后我来讲一下怎么实现的。首先去http://opencv.org/downloads.html下载OpenCV for iOS我下载的是3.1版本。链接点进去没反应的自行翻墙一下。然后将里面的framework直接拖入到iOS工程中。界面什么的随便搭一下。头文件引入#import #原创 2016-09-26 20:51:05 · 4497 阅读 · 0 评论 -
[iOS]__attribute__
今天看博客看到了sunnyxx大神介绍了关于attribute的一个黑魔法,并且我在ibirme大神的源代码里面也看到他用过这个属性,我就系统的学习了一下,记录一下常用的方法。__attribute__((format())) 这个format有3个参数。int my(NSString *str,NSString *str1,NSArray*str2,...) __attri原创 2016-09-07 19:41:45 · 1341 阅读 · 0 评论 -
[iOS]XMPP didReceivePresenceSubscriptionRequest函数不执行解决办法
这是收到其他人对你加好友请求接收的方法。今天写了这个方法之后死活不掉用。不过现在已经解决了。我看了Roster.m的源码,发现调用这个函数的函数叫didReceivePresence是不是很熟悉!!!!!没有错,这个函数就是我们在接收好友状态的时候的那个回调函数,一般用来判断哪些好友在线之类的。这个函数已经被我们自己重写了,所以Roster里原创 2015-09-24 21:24:41 · 1319 阅读 · 0 评论 -
[iOS]UIButton源码分析
首先说为什么要写这个,因为上个月面试问到了,当时看IOS也才一两个月,水平的确是不行,现在有时间把这块补一补。下面都是UIButton自己的方法和属性,不包括从UIControl,UIView,UIResponder和NSObject继承过来的。typedef NS_ENUM(NSInteger, UIButtonType) { UIButtonTyp原创 2015-11-21 16:01:12 · 1252 阅读 · 0 评论 -
[iOS]UIControl源码分析
typedef NS_OPTIONS(NSUInteger, UIControlEvents) { UIControlEventTouchDown = 1 UIControlEventTouchDownRepeat = 1原创 2015-11-23 15:52:03 · 1024 阅读 · 0 评论 -
[iOS]解决setSecureTextEntry切换之后有留白的问题
我有一个密码隐藏显示的功能,经常切换之后后边有留白,但是其实根本什么都没有,只是由于字体的不同导致光标没有转换过去。最后解决了这个问题。从暗文到明文转换的时候把字符串保存到一个临时的字符串上,然后把textField置空,text = @ “ ”。然后再把临时字符串赋值给textField即可。原创 2015-12-09 19:31:26 · 1496 阅读 · 0 评论 -
[iOS]arc4random_uniform()函数
这个函数不像arc4random()产生的数那么大,arc4random_uniform(n)就可以产生1-(n-1)之间的数原创 2015-12-17 16:53:25 · 1569 阅读 · 0 评论 -
[iOS]关于__unsafe_unretained与__weak
ios5之前用__unsafe_unretained之后用__weak现在应该都用__weak了,__unsafe_unretained会造成野指针的问题,因为当他所指向的对象引用计数为0的时候,他不会变为nil。原创 2015-12-17 16:59:18 · 517 阅读 · 0 评论 -
[iOS]一个设置多个类似标志的好办法 iOS 类似flag
struct{unsigned int flag1 :1;unsigned int flag2 :2;} flag这样就可以用flag.flag1 = YES这样的方式来做标志位(名字可以起的规范一点)。这种方式非常节省空间,每个标志位只占用一个二进制位。原创 2015-12-24 17:36:47 · 562 阅读 · 0 评论 -
[iOS]iOS在分类中声明属性的方法(不提倡使用)以及关联对象介绍
今天只是想看看能不能在分类中声明属性,发现果然可以,不过最好还是不要使用。首先在一个分类里声明一个属性,执行。没有问题然后其它类中引入这个分类,访问我生命的这个属性。报错了没有set方法,我们在.m文件中也可以看到警告原因是没有合成存取方法。下面我们实现以下合成存取方法。发现根本就没有_str,当然不能用self.st原创 2015-12-25 20:32:20 · 1430 阅读 · 0 评论 -
nil、Nil、NULL、NSNull的区别
nil:指向一个对象的空指针Nil:指向一个类的空指针NULL:指向其他类型(如:基本类型、C类型)的空指针NSNull:通常表示集合中的空值举例:NSURL *url = nil;Class class = Nil;int *pointerInt = NULL;NSArray *array = [NSArray转载 2016-05-23 14:35:08 · 473 阅读 · 0 评论 -
NSObject的load和initialize方法
面试被问到了,而且很自信的答错了。。。。因此转了一篇比较好的文章。0. 概述Objective-C作为一门面向对象语言,有类和对象的概念。编译后,类相关的数据结构会保留在目标文件中,在运行时得到解析和使用。在应用程序运行起来的时候,类的信息会有加载和初始化过程。其实在Java语言中也有类似的过程,JVM的ClassLoader也对类进行了加载、连接、初始化。就像Ap转载 2016-05-23 11:03:47 · 286 阅读 · 0 评论 -
KVO实现原理
KVO(Key Value Observing),是观察者模式在Foundation中的实现KVO的原理简而言之就是:当一个object有观察者时,动态创建这个object的类的子类对于每个被观察的property,重写其set方法在重写的set方法中调用- willChangeValueForKey:和- didChangeValueForKey:通知观察者当一个pr转载 2016-06-02 12:56:28 · 273 阅读 · 0 评论 -
在 Mac OS X 终端里使用 Solarized 配色方案
相信长期浸泡在终端和代码的小伙伴们都有一套自己喜爱的配色方案。以前一直在用简单、适合阅读的 Terminal.app 配色方案,换到 MacBook Pro with Retina display 后发现这个配色时间看长了眼睛有点累。不断有人推荐 Solarized,看了一些截图,感觉还不错,决定试一下。Solarized 是目前最完整的 Terminal/Editor/IDE 配色项转载 2015-11-20 20:08:47 · 609 阅读 · 0 评论 -
IOS使用XMPP最新教程(二)登陆实现
因为要写成一个系列,不想每次写太多,这次就简单的实现一个登陆的功能。//是否连接-(BOOL)connect;//终止连接- (void)disconnect//设置xmppStream-(void)setupStream;//上线-(void)goOnline;//下线-(void)goO原创 2015-09-24 21:40:46 · 942 阅读 · 2 评论 -
IOS使用XMPP最新教程(五)添加好友和接受好友请求
加好友要使用Roster类,整个加好友的过程比较简单,就是下面的代码。XMPPRoster * xmppRoster = [self xmppRoster]; [xmppRoster subscribePresenceToUser:jid];注意jid是这样生成的:XMPPJID *jid = [XMPPJID jidWithS原创 2015-10-12 12:49:57 · 1396 阅读 · 0 评论 -
IOS使用XMPP最新教程(六)发送和接收消息
这一篇应该是这个系列的最后一篇了,基本已经涵盖了开发所需要的大部分功能,想要其余的功能可以看xmppFramework的文档。发送消息:- (IBAction)sendButton:(id)sender { NSString *message = self.textField.text; if (message原创 2015-10-12 15:48:50 · 2291 阅读 · 0 评论 -
IOS7 点击空白处隐藏键盘的几种方法
IOS7 点击空白处隐藏键盘的几种方法IOS开发中经常要用到输入框,默认情况下点击输入框就会弹出键盘,但是必须要实现输入框return的委托方法才能取消键盘的显示,对于用户体验来说很不友好,我们可以实现点击键盘以外的空白区域来将键盘隐藏,以下我总结出了几种隐藏键盘的方法:首先说明两种可以让键盘隐藏的Method:1、[view endEd转载 2015-11-11 16:12:19 · 548 阅读 · 0 评论 -
iOS 单例模式的介绍和写法
创建一个单例很多办法。我先列举一个苹果官方文档中的写法。 [cpp] view plaincopystatic AccountManager *DefaultManager = nil; + (AccountManager *)defaultManager { if (!DefaultManager) DefaultMa转载 2015-11-08 23:06:45 · 406 阅读 · 0 评论 -
iOS 正则表达式 NSRegularExpression
iOS 中可以通过 NSPredicate 来处理正则表达式。相关资料如下:NSPredicate 苹果官方文档:http://developer.apple.com/documentation/Cocoa/Conceptual/Predicates/predicates.htmlPredicate format strings:http://developer.apple转载 2015-11-08 12:50:07 · 461 阅读 · 0 评论 -
IOS中的instancetype和id关键字
Objective-C中的instancetype和id关键字作者:wangzz原文地址:http://blog.youkuaiyun.com/wzzvictory/article/details/16994913转载请注明出处如果觉得文章对你有所帮助,请通过留言或关注微信公众帐号wangzzstrive来支持我,谢谢!一、什么是instancetypein转载 2015-11-08 16:41:54 · 776 阅读 · 0 评论 -
IOS使用XMPP最新教程(四)获取好友列表 (通过花名册)
这是真正用来获取好友列表的方法,网上也有,不过网上没有找到花名册初始化的方法,这个也是坑啊!!!首先在setupStream方法里面xmppRosterCoreDataStorage = [[XMPPRosterCoreDataStorage alloc]init]; xmppRoster = [[XMPPRoster alloc] initWithRos原创 2015-10-07 14:12:20 · 2723 阅读 · 0 评论 -
IOS使用XMPP最新教程(一)openfire安装+XMPP框架搭建
最近要开发一个项目,需要IM(即时通讯功能),而大家普遍使用的都是XMPP框架,经过几天的学习,终于把它搭建好了,做了一个demo。我在网上看了很多例子,基本都已经过时了,搭建不成功,经过不断的探索,才得以成功,我想把我的经验写下来,以免大家重蹈覆辙,浪费大量的时间在这上面。首先是openfire安装,这个一般没什么问题,按照网上的教程就可以。我主要说一下XMPP框架的搭建http原创 2015-09-20 16:05:16 · 1852 阅读 · 2 评论 -
IOS使用XMPP最新教程(三)获取好友列表 (通过获取好友状态)
就是下面这个函数- (void)xmppStream:(XMPPStream *)sender didReceivePresence:(XMPPPresence *)presence{}目前网上的demo都是用这个函数来获取好友列表的,但是此方法并不是用来获取好友列表的,他只能拿到线上好友的信息,如果这个好友没上线,你就无法取得这个好友的信息,一旦这个好友上线了,你就能取到,如原创 2015-10-04 17:11:38 · 2049 阅读 · 0 评论