
iOS
文章平均质量分 50
bigjar_W
!!!!!
展开
-
ios 8新特性
随便去问任何人,他们都会告诉你WWDC2014是近年来最为激动的回忆。 整个大会没有发布任何新硬件,它是一次史无前例的软件开发者盛宴!仅是iOS 8和OS X Yosemite的发布就能让2014成为苹果平台划时代的一年,加上Extension,Continuity,SpriteKit 改进,iOS SceneKit,Metal,HealthKit,Local Authentication转载 2016-05-20 10:21:44 · 566 阅读 · 0 评论 -
利用openssl进行RSA签名
NSString *RSA_EVP_Sign(NSString *data){ unsigned char *Str=(unsigned char *)[data UTF8String]; EVP_PKEY *prikey; NSString *private = formatPrivate(PRIVATE_KEY); NSData *pri= [pri原创 2016-04-27 17:29:11 · 1045 阅读 · 0 评论 -
多线程中NSLock
//线程1 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ [lock lock]; [obj method1]; sleep(30); [lock unlock]; });转载 2016-04-27 16:08:24 · 373 阅读 · 0 评论 -
利用openssl库进行RSA加密
NSString *RSA_encrypt(NSString *data){ unsigned char *str=(unsigned char*)[data UTF8String]; //把要加密的数据进行utf8编码 unsigned char *p_en; RSA *p_rsa; int rsa_len; NSString *public = fo原创 2016-04-27 15:54:21 · 828 阅读 · 0 评论 -
ARC 学习笔记(二)-Outlet与弱引用
当我们使用storyboard时,可以使用Interface Builder生成Outlet对象,然后你会发现其中的内存管理属性一般都是weak修饰符。其实这是为了防止循环引用。因为一般我们都是拖出来的subview,而Outlet的持有者是superview对象,如果再用strong来修饰subview的话,那么就会出现父子的引用循环。 如果不设置为weak类型,那么UIViewControll原创 2015-10-30 22:15:36 · 361 阅读 · 0 评论 -
ARC 学习笔记(一)
ARC,顾名思义,automatic reference count,也就是自动引用计数。它是相对MRC(手动引用计数)而言的。当时不管是ARC还是MRC,都应该严格遵守Objective-C内存管理的基本原则:自己生成的对象,那么即是其持有者不是自己生成的对象,也可成为其持有者(一个对象可以被多个人持有)如果不想持有对象的时候,必须释放其所有权不能释放已不再持有所有权的对象__stron原创 2015-10-30 21:02:37 · 389 阅读 · 0 评论 -
iOS中copy 学习笔记
copy表达的属性与strong类似。但是设置方法并不保留新值,而是将其copy,当属性为NSString时,经常用此特质来保护其封装性,因为传递给设置方法的新值可能指向NSMutableString类的实例。但是NSMutableString是可以更改的,如果不设置copy,那么NSString的值就会在不知情的情况下被更改。另外block中有时也会使用copy,因为在MRC时代,方法内部的blo原创 2015-10-31 21:32:24 · 339 阅读 · 0 评论 -
黑幕背后的Block
我们知道在Block使用中,Block内部能够读取外部局部变量的值。但我们需要改变这个变量的值时,我们需要给它附加上__block修饰符。__block另外一个比较多的使用场景是,为了避免某些情况下Block循环引用的问题,我们也可以给相应对象加上__block 修饰符。为什么不使用__block就不能在Block内部修改外部的局部变量?我们把以下代码通过 clang -rewrite转载 2015-10-30 21:53:14 · 459 阅读 · 0 评论 -
Block的循环引用
Block是iOS 4开始导入的,类似lambda表达式,但是在使用Block的过程中,很有可能引起引用循环。如下图所示当我们遇到这种情况时,可以有两种解决方案。__block修饰符...__block id temp = self;void(^block)(void) = ^{ temp = nil;}block();...通过执行block方法,nil被赋值到__block变量原创 2015-10-30 21:46:37 · 307 阅读 · 0 评论 -
runtime 使用情况(一)
动态运行时添加方法,可能大家都知道,但是何时使用,可能不是很清楚。其中一种运用情况就是支持新旧两种API。- (void)doSomething { // legacy code goes here...}- (void)doSomethingWithNewAPI { // do the same thing, but use new API.}+ (void)initialis原创 2015-11-15 14:59:21 · 306 阅读 · 0 评论 -
iOS集合 学习笔记
本文简单列举了3种常用的类。1.NSArray 和 NSMutableArray类可以管理数组,即任意类型对象的有序集合。NSArray类不可变,NSMutableArray类可变,也就是允许添加或删除集合中的对象。支持的操作包括创建和初始化数组、查询、比较。2.NSDictionary 和 NSMutableDictionary类用于管理键值。键必须具有唯一性。其中的方法包括创建和初始化对象、查询原创 2015-10-28 18:53:06 · 268 阅读 · 0 评论 -
MKMapView的Span和Region深入分析
本文转载自 http://www.it165.net/pro/html/201403/10827.html很多人在第一次开发iPhone应用遇到地图库的时候,都会有这样一个问题,iOS库中MKMapView没有zoomLevel这样的概念,替代的是MKCoordinateSpan和MKCoordinateRegion,那他们究竟代表什么意思呢?如何使用呢?我上网搜索了好久,也没有人说的很明转载 2016-05-10 17:12:01 · 1359 阅读 · 0 评论 -
唯一标识符
【转】UDID解决办法,转自cocoachina 在2013年3月21日苹果已经通知开发者,从2013年5月1日起,访问UIDID的应用将不再能通过审核,替代的方案是开发者应该使用“在iOS 6中介绍的Vendor或Advertising标示符”。unique Identifier即将退出,苹果给了我们Vendor和Advertising identifier两转载 2016-05-24 11:10:46 · 1221 阅读 · 0 评论 -
hmac-md5算法
+ (NSString *)hmac_MD5:(NSString *)plaintext withKey:(NSString *)key{ constchar *cKey = [key cStringUsingEncoding:NSUTF8StringEncoding]; constchar *cData = [plaintext cStringUsingEnco原创 2016-04-29 09:58:05 · 1771 阅读 · 0 评论 -
iOS模块化之路(一)
人们往往会在appDelegate中的方法中引入一些其它模块的初始化工作。但是这造成了代码的杂乱。其实可以通过NSNotification在自己的模块中完成初始化。/// FooModule.m+ (void)load{ __block id observer = [[NSNotificationCenter defaultCenter] addObserverFor原创 2016-05-18 09:03:03 · 426 阅读 · 0 评论 -
页面点击统计集成
用swizzling method 来从底层插入页面统计的代码,避免这些代码的散落分布。具体参考http://www.cocoachina.com/ios/20160421/15912.html原创 2016-05-17 10:33:24 · 515 阅读 · 0 评论 -
iOS应用架构谈(一):架构设计的方法论
摘要:iOS客户端应用架构看似简单,但实际上要考虑的事情不少。本文作者将以系列文章的形式来回答iOS应用架构中的种种问题,本文是其中的第一篇,主要讲架构设计的通识和方法论等,同时还讨论了大家关心的架构分层、是否要有common文件夹等问题。缘由之前安居客iOS app的第二版架构大部分内容是我做的,期间有总结了一些经验。在将近一年之后,前同事zzz在微信朋友圈上发了一个问题:假如问转载 2016-05-04 15:02:54 · 725 阅读 · 0 评论 -
GCD实现计时器
UIButton *button = (UIButton *)[self viewWithTag:999]; __block int timeout = 60; dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);原创 2016-05-04 09:56:11 · 397 阅读 · 0 评论 -
为什么都要在主线程中更新UI(iOS开发)
在 iOS开发过程中,我一直知道更新UI需要在主线程中,但也没怎么细想为什么要在主线程中,或者说为什么不能在子线程中更新UI。今天抽空自己在网上查查资料 ,了解一下这个问题。 像UIKit这样大的框架上确保线程安全是一个重大的任务,会带来巨大的成本。UIKit不是线程安全的,假如在两个线程中设置了同一张背景图片,很有可能就会由于背景图片被释放两次,使得程序崩溃。或者某一个线程中遍历找转载 2016-05-03 16:11:16 · 8334 阅读 · 0 评论 -
IOS中的AES加密算法
AES算法是一种对称的加密算法,只要有密钥就可以解密加密后的数据。ios中的具体实现如下:+(NSData *)AESEncryptWithKey:(NSString *)key andData: (NSString *)sourceString{ // 'key' should be 32 bytes for AES256, will be null-padded otherwis原创 2016-05-13 14:35:41 · 557 阅读 · 0 评论 -
多个storyboard实现tabbar
当多人协作开发代码时,共同维护一个storyboard往往会在提交代码时产生不太友好的冲突。这时可以用多个storyboard,每个人维护自己的storyboard,这样就可以有效解决冲突的问题。以下就是简略的代码,用多个storyboard来完成tabbar的各个分支。#import "ViewController.h"@interface ViewController ()@end原创 2016-05-03 09:07:50 · 664 阅读 · 0 评论 -
如何修改oc中默认的NSLog函数
有时希望获得consolo中打印输出能够定位到是哪个函数中输出的,那么则可以修改系统默认的NSLog函数来实现这个功能。#import #define NSLog(args...) _Log(@"DEBUG ", __FILE__,__LINE__,__PRETTY_FUNCTION__,args);@interface Log : NSObjectvoid _Log(NSStr原创 2016-04-29 11:05:44 · 593 阅读 · 0 评论 -
如何添加 .PCH OR PREFIX.PCH 文件到 XCODE 6?
什么是 .pch 文件?pch文件是一个标准的预编译头文件( Pre-Compiled Header). 这个文件会被编译存储在一个缓冲空间里并且自动有且只有一次包含到每个文件里。它能够提高编译速度,让你不用import任何代码到你的代码文件里就能添加了该引用。问题描述当你启动Xcode6,然后创建一个新工程的时候,新版本的xcode6不会自动创建-Prefix.pch文件到你的工程里转载 2016-04-29 10:58:08 · 369 阅读 · 0 评论 -
hmac-sha1算法
+ (NSString *)hmac_sha1:(NSString *)plaintext withKey:(NSString *)key{ NSData *cKey = [self hexStringToNSData:key]; //key转换为二进制数据 const char *cData = [plaintext cStringUsingEncoding:NSUTF8S原创 2016-04-29 10:25:20 · 1049 阅读 · 0 评论 -
__weak & autoreleasepool
__weak修饰符相对于__strong修饰,是为了解决循环引用的。@interface Test: NSObject{ id __strong obj_;}- (void)setObject:(id __strong)obj;@end@implement Test- (id)init { self = [super init]; return self;}- (原创 2015-11-13 22:58:12 · 387 阅读 · 0 评论 -
ARC 学习笔记(三)
引用计数的原则自己生成的对象自己持有非自己生成的对象自己也可以持有不再需要自己持有的对象时释放非自己持有的对象无法释放案例:/* * 自己生成并持有对象 */ id obj1 = [[NSObject alloc] init]; /* * 自己持有对象 */ [obj1 release]; /* * 释放对象针仍然被保留在变原创 2015-11-13 20:11:50 · 290 阅读 · 0 评论 -
Objective-C 动态绑定 学习笔记
动态绑定是指在运行程序时(而不是在编译时)将消息与方法对应起来的处理过程。许多对象可能会实现相同的方法,调用方法的方式会动态的变化。因此,动态绑定实现了OOP的多态性。当然,通过动态绑定,因为可以消除用于多选场景的条件逻辑,从而可以降低程序的复杂度。 动态绑定是Objective-C的一种继承特性,它不需要任何特定的API。使用动态绑定可以将消息选择器设置为在运行程序时确定的变量。使用:@dyna原创 2015-10-28 23:32:13 · 1021 阅读 · 0 评论 -
Associated Objects
Associated Objects—或者 Associative References,正如他们起初所被认识的那样—是Objective-C 2.0 runtime的特征,在OS X Snow Leopard(IOS 4)中被引进。具体指的就是@interface NSObject (AssociatedObject)@property (nonatomic, strong) id associ翻译 2015-09-01 10:37:35 · 260 阅读 · 0 评论 -
ISA指针
在Objective-C中,一切皆是对象,包括类。在其内部,每一个对象都有一个名为isa的指针,指向该对象的类。每一个类包含变量的成员列表,成员函数的列表等。每个对象都可以接收消息,而对象能够接收的消息列表是保存在它对应的类中。 在objc.h中可以看到如下代码,可以发现NSObject就是一个包含isa指针的结构体struct objc_object { Class isa OBJC_原创 2015-09-01 20:17:55 · 1338 阅读 · 0 评论 -
IOS中的block和retain cycle
IOS中的block和retain cycle retain cycle 的产生 说到retain cycle,首先要提一下Objective-C的内存管理机制。作为C语言的超集,Objective-C延续了C语言中手动管理内存的方式,但是区别于C++的极其非人道的内存管理,Objective-C提出了一些机制来减少内存管理的难度。 比如:内存计数。转载 2015-08-05 14:40:54 · 277 阅读 · 0 评论 -
oc中framework的链接问题
有时oc在用别人的framework时,导入时会出现头文件无法导入的问题。可能的原因是别人做的framework的内部链接头文件有问题,这就需要删除原来的链接,自己做一个链接。在Mac终端进入framework,然后删除原来的链接,用"ls -a 源文件 目标文件"来重新链接头文件,这样导入之后就没问题了。原创 2015-07-24 10:57:22 · 542 阅读 · 0 评论 -
OC中字符串中英文判断
-(BOOL)judgeString { //判断是否输入合法 BOOL success = true; if (language==0) { //判断是否中文中含有英文 for(int i=0; i unichar commitChar = [self.context.text characterAtIndex:i]原创 2015-07-24 10:11:28 · 857 阅读 · 0 评论 -
iOS中手机拍照的图片旋转
有时,手机摄像头拍的图片是横着或者是镜像的(比如用前置摄像头),那么可能就需要对图片进行旋转纠正。可以对UIimage类进行分类扩展。代码如下//.h文件#import @interface UIImage (ImageRotate)+ (UIImage *)rotateImage: (UIImage *)image;@end转载 2015-08-14 13:19:24 · 381 阅读 · 0 评论 -
swift 反向过渡
我们设置过渡的时候选择的是modal类型,不是push。所以用户输入后需要手工返回。导航条上有两个按钮,完成和取消。所以我们要对这两个按钮进行反向过渡,我们需要在事件源头添加@IBAction。代码如下: @IBAction func unwindToList(segue:UIStoryboardSegue){ }以上代码应该添加到RestaurantListV转载 2015-07-20 11:27:00 · 402 阅读 · 0 评论 -
NSOperation
在生活中过,经常有许多工作要做。每天有固定的任务流程,这些流程充斥着我们的工作时间。但是不管一个人的任务有多重,在面对IOS app的负载时,这些任务将变得苍白无力。因为IOS app要执行数以亿计的计算,同时每16亿秒的速度管理着绘制任务。 编程中的生产率,就如生活中的一样,是一种计划、优先和多任务一起存在的一种关系。使程序变快的秘籍就是尽可能的降低不需要的工作到后台去,在这方面,现代的Coco翻译 2015-08-21 21:03:24 · 449 阅读 · 0 评论 -
ios同步与异步网络请求
1、同步请求Object-c代码 - (void) initRequestData : (RequestVO *) requestParam{ NSMutableDictionary *paramDic = [[NSMutableDictionary alloc] init]; NSMutableDictionary *directory转载 2015-07-10 09:58:03 · 548 阅读 · 0 评论 -
id ,NSObject和id<object>的区别
我们经常会混淆以下三种申明(我是没有留意过): 1. id foo1; 2. NSObject *foo2; 3. id foo3; 第一种是最常用的,它简单地申明了指向对象的指针,没有给编译器任何类型信息,因此,编译器不会做类型检查。但也因为是这样,你可以发送任何信息给id类型的对象。这就是为什么+alloc返回id类型,但调用[[Foo alloc]转载 2015-07-10 10:54:52 · 443 阅读 · 0 评论 -
CocoaPods使用说明
在终端进入当前项目的根目录----cd 根目录创建一个Podfile文件----touch Podfile进入这个Podfile文件----vi Podfile输入想要包含的内容----比如pod ‘JSONKit’, ‘~> 1.4’保存退出Podfile下载刚才输入的内容----pod update 可能由于网络的原因,可能下载不下来那么pod install 可以替换为p原创 2015-09-01 22:28:36 · 289 阅读 · 0 评论 -
iOS中init和initialize的特点
在NSObject.h中有两个类方法:+(void)load;+(void)initalize;相同点:initialize和load,我们并不需要在这两个方法的实现中使用super调用父类的方法。不同点:load不像普通方法一样遵守继承规则,当自己的类没有实现load方法时,不管超类是否实现,自己都不会加载load方法,而initialize则是遵守继承规则的。其中load方法是在加载类原创 2015-09-01 18:37:35 · 1027 阅读 · 0 评论 -
NSObject.h解(一)
NSObject协议方法 第一个方法:判断是否和另一个对象相等- (BOOL)isEqual:(id)obj { return obj == self;}第二个方法:获得自己- (id)self { return self;}第三个方法:获得类对象- (Class)class { return object_getClass(self);}第四个方法:执行选择子- (原创 2015-09-01 19:26:00 · 330 阅读 · 0 评论