自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(78)
  • 问答 (3)
  • 收藏
  • 关注

转载 唯一标识符

【转】UDID解决办法,转自cocoachina 在2013年3月21日苹果已经通知开发者,从2013年5月1日起,访问UIDID的应用将不再能通过审核,替代的方案是开发者应该使用“在iOS 6中介绍的Vendor或Advertising标示符”。unique Identifier即将退出,苹果给了我们Vendor和Advertising identifier两

2016-05-24 11:10:46 1138

转载 ios 8新特性

随便去问任何人,他们都会告诉你WWDC2014是近年来最为激动的回忆。 整个大会没有发布任何新硬件,它是一次史无前例的软件开发者盛宴!仅是iOS 8和OS X Yosemite的发布就能让2014成为苹果平台划时代的一年,加上Extension,Continuity,SpriteKit 改进,iOS SceneKit,Metal,HealthKit,Local Authentication

2016-05-20 10:21:44 520

原创 iOS模块化之路(一)

人们往往会在appDelegate中的方法中引入一些其它模块的初始化工作。但是这造成了代码的杂乱。其实可以通过NSNotification在自己的模块中完成初始化。/// FooModule.m+ (void)load{ __block id observer = [[NSNotificationCenter defaultCenter] addObserverFor

2016-05-18 09:03:03 358

原创 页面点击统计集成

用swizzling method 来从底层插入页面统计的代码,避免这些代码的散落分布。具体参考http://www.cocoachina.com/ios/20160421/15912.html

2016-05-17 10:33:24 453

原创 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 484

原创 HTTPS解析

一张图解析HTTPS的原理

2016-05-11 16:33:19 259

转载 MKMapView的Span和Region深入分析

本文转载自 http://www.it165.net/pro/html/201403/10827.html很多人在第一次开发iPhone应用遇到地图库的时候,都会有这样一个问题,iOS库中MKMapView没有zoomLevel这样的概念,替代的是MKCoordinateSpan和MKCoordinateRegion,那他们究竟代表什么意思呢?如何使用呢?我上网搜索了好久,也没有人说的很明

2016-05-10 17:12:01 1303

转载 xpath语法

XPath 是一门在 XML 文档中查找信息的语言。XPath 可用来在 XML 文档中对元素和属性进行遍历。     XPath 是 W3C XSLT 标准的主要元素,并且 XQuery 和 XPointer 同时被构建于 XPath 表达之上。     推荐一个挺不错的网站:http://www.zvon.org/xxl/XPathTutorial/General_chi/ex

2016-05-06 14:27:18 242

转载 MAC OSX下用pip无法安装lxml的解决办法

一、问题现象在安装pyspider时安装到lxml报错[plain] view plain copy print?In file included from src/lxml/lxml.etree.c:323:   src/lxml/includes/etree_defs.h:14:10: fatal error: 'libxml

2016-05-05 13:50:36 636

转载 iOS应用架构谈(一):架构设计的方法论

摘要:iOS客户端应用架构看似简单,但实际上要考虑的事情不少。本文作者将以系列文章的形式来回答iOS应用架构中的种种问题,本文是其中的第一篇,主要讲架构设计的通识和方法论等,同时还讨论了大家关心的架构分层、是否要有common文件夹等问题。缘由之前安居客iOS app的第二版架构大部分内容是我做的,期间有总结了一些经验。在将近一年之后,前同事zzz在微信朋友圈上发了一个问题:假如问

2016-05-04 15:02:54 677

转载 Mac 搭建 SVN 服务器环境

一、创建svn repositorysvnadmin create /path/svn/pro //仓库位置,svn是svn的目录,pro是一个版本库的目录PS:这里有个歧义,按这样的方式添加 SVN 后,在启动 SVN 服务的时候,记得要用 /path/svn这个路径,而不能用 /path/svn/pro 这个路径,不然会报 doesn’t exist例子:先

2016-05-04 14:37:26 322

转载 源代码管理工具-SVN

一 、SVN操作> 1. svn import> 2. svn checkout : 将服务器所有代码下载到本地> 3. svn commit : 提交本地最新代码到服务器> 4. svn update : 从服务器更新最新被修改的代码一、. 了解-SVN服务器配置服务器环境搭建Mac 下直接配置(Mac 下安装SVN), (Mac下配置SVN 服务器)Windo

2016-05-04 11:25:53 355

转载 HTTP 协议详解

当今web程序的开发技术真是百家争鸣,ASP.NET, PHP, JSP,Perl, AJAX 等等。 无论Web技术在未来如何发展,理解Web程序之间通信的基本协议相当重要, 因为它让我们理解了Web应用程序的内部工作. 本文将对HTTP协议进行详细的实例讲解,内容较多,希望大家耐心看。也希望对大家的开发工作或者测试工作有所帮助。使用Fiddler工具非常方便地捕获HTTP Request和HT

2016-05-04 11:20:56 240

原创 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 360

转载 为什么都要在主线程中更新UI(iOS开发)

在 iOS开发过程中,我一直知道更新UI需要在主线程中,但也没怎么细想为什么要在主线程中,或者说为什么不能在子线程中更新UI。今天抽空自己在网上查查资料 ,了解一下这个问题。      像UIKit这样大的框架上确保线程安全是一个重大的任务,会带来巨大的成本。UIKit不是线程安全的,假如在两个线程中设置了同一张背景图片,很有可能就会由于背景图片被释放两次,使得程序崩溃。或者某一个线程中遍历找

2016-05-03 16:11:16 8264

转载 内存地址空间与十六进制,为什么需要八进制和十六进制? 十六进制的意义何在

众所周知, 内存地址空间是用16进制的数据表示, 如0x8049324, 那为什么需要用十六进制表示呢? 十六进制的意义何在? 编程中,我们常用的还是10进制.毕竟C/C++是高级语言。   比如:int a = 100,b = 99;   不过,由于数据在计算机中的表示,最终以二进制的形式存在,所以有时候使用二进制,可以更直观地解决 问题。但二进制数太长了。比如i

2016-05-03 11:28:02 2681

原创 多个storyboard实现tabbar

当多人协作开发代码时,共同维护一个storyboard往往会在提交代码时产生不太友好的冲突。这时可以用多个storyboard,每个人维护自己的storyboard,这样就可以有效解决冲突的问题。以下就是简略的代码,用多个storyboard来完成tabbar的各个分支。#import "ViewController.h"@interface ViewController ()@end

2016-05-03 09:07:50 622

原创 如何修改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 526

转载 如何添加 .PCH OR PREFIX.PCH 文件到 XCODE 6?

什么是 .pch 文件?pch文件是一个标准的预编译头文件( Pre-Compiled Header). 这个文件会被编译存储在一个缓冲空间里并且自动有且只有一次包含到每个文件里。它能够提高编译速度,让你不用import任何代码到你的代码文件里就能添加了该引用。问题描述当你启动Xcode6,然后创建一个新工程的时候,新版本的xcode6不会自动创建-Prefix.pch文件到你的工程里

2016-04-29 10:58:08 334

原创 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 963

原创 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 1711

转载 HMAC-MD5算法原理及实现

以下是分析节选,对于更详细的描述可以查阅RFC2104文档。HMAC需要一个加密用散列函数(表示为H)和一个密钥K。假设H是一个将数据块用一个基本的迭代压缩函数来加密的散列函数。用B来表示数据块的长。(以上说提到的散列函数的分割数据块长B=64),用L来表示散列函数的输出数据长(MD5中L=16,SHA—1中L=20)。密钥的长度可以是小于等于数据块长的

2016-04-29 08:57:14 2247

转载 HMAC加密算法

HMAC加密算法是一种基于密钥的报文完整性的验证方法,其安全性是建立在Hash加密算法基础上的。它要求通信双方共享密钥、约定算法、对报文进行Hash运算,形成固定长度的认证码。通信双方通过认证码的校验来确定报文的合法性。HMAC加密算法可以用来作加密、数字签名、报文验证等。HMAC加密算法的定义HMAC加密算法是一种执行“校验和”的算法,它通过对数据进行“求和”来检查数据是否被更改

2016-04-28 17:18:27 1350

原创 MD5加密算法

MD5是一个不可逆的安全的散列算法,不同的输入不会产生相同的输出,根据输出得不到输入。MD5算法主要运用在数字签名、文件完整性以及口令加密等方面。

2016-04-28 15:41:43 296

原创 RSA签名和验签过程

1.签名过程:client提取消息m的消息摘要h(m),并使用自己的私钥对摘要h(m)进行加密,生成签名s。client将签名s和消息m一起,使用server发过来的公钥进行加密,获得密文c,发送给server。2.验签过程:server接受到密文后,用自己的私钥对其解密,获得明文消息m和签名s。server使用client的公钥解密数字签名s,获得消息摘要h(m)。s

2016-04-28 09:07:36 11093

原创 利用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 973

转载 多线程中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 315

原创 利用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 758

转载 网络安全

作者:郭无心链接:https://www.zhihu.com/question/19816240/answer/63371634来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。在当前世界中,网络已成为不可或缺的元素。它将原来遥不可及的事物,方便快捷的联系到一起。为了充分利用网络所带来的便捷,越来越多的企业选择将信息发布在网络上。电子商务、物联网、云

2016-04-27 10:25:51 616

原创 RSA算法

RSA算法是最常用的非对称加密算法。其既可以用于加密,也可以用于数字签名。RSA的安全基于大数分解的难度。公钥KUn:两素数p和q的乘积(p,q必须保密)e:与(p-1)(q-1)的乘积互质私钥KRd:e-1(mod(p-1)(q-1))n:加密c ≡ me mod n解密

2016-04-27 09:58:16 425

原创 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 273

原创 Xcode没有simulators

网上下载了xcode插件后,发现编译选项中没有simulators,无法运行,但是以前是可以的,去perferences->downloads中查看simulators,都是最新的,因此系统上是存在模拟器的。 解决方案:打开windows->devices,发现里面没有simulators,点击里面的+,可以添加模拟器。

2015-11-14 07:04:52 578

原创 __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 348

原创 ARC 学习笔记(三)

引用计数的原则自己生成的对象自己持有非自己生成的对象自己也可以持有不再需要自己持有的对象时释放非自己持有的对象无法释放案例:/* * 自己生成并持有对象 */ id obj1 = [[NSObject alloc] init]; /* * 自己持有对象 */ [obj1 release]; /* * 释放对象针仍然被保留在变

2015-11-13 20:11:50 254

原创 iOS中copy 学习笔记

copy表达的属性与strong类似。但是设置方法并不保留新值,而是将其copy,当属性为NSString时,经常用此特质来保护其封装性,因为传递给设置方法的新值可能指向NSMutableString类的实例。但是NSMutableString是可以更改的,如果不设置copy,那么NSString的值就会在不知情的情况下被更改。另外block中有时也会使用copy,因为在MRC时代,方法内部的blo

2015-10-31 21:32:24 305

原创 ARC 学习笔记(二)-Outlet与弱引用

当我们使用storyboard时,可以使用Interface Builder生成Outlet对象,然后你会发现其中的内存管理属性一般都是weak修饰符。其实这是为了防止循环引用。因为一般我们都是拖出来的subview,而Outlet的持有者是superview对象,如果再用strong来修饰subview的话,那么就会出现父子的引用循环。 如果不设置为weak类型,那么UIViewControll

2015-10-30 22:15:36 321

转载 黑幕背后的Block

我们知道在Block使用中,Block内部能够读取外部局部变量的值。但我们需要改变这个变量的值时,我们需要给它附加上__block修饰符。__block另外一个比较多的使用场景是,为了避免某些情况下Block循环引用的问题,我们也可以给相应对象加上__block 修饰符。为什么不使用__block就不能在Block内部修改外部的局部变量?我们把以下代码通过 clang -rewrite

2015-10-30 21:53:14 419

原创 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 275

原创 ARC 学习笔记(一)

ARC,顾名思义,automatic reference count,也就是自动引用计数。它是相对MRC(手动引用计数)而言的。当时不管是ARC还是MRC,都应该严格遵守Objective-C内存管理的基本原则:自己生成的对象,那么即是其持有者不是自己生成的对象,也可成为其持有者(一个对象可以被多个人持有)如果不想持有对象的时候,必须释放其所有权不能释放已不再持有所有权的对象__stron

2015-10-30 21:02:37 351

原创 Objective-C 动态绑定 学习笔记

动态绑定是指在运行程序时(而不是在编译时)将消息与方法对应起来的处理过程。许多对象可能会实现相同的方法,调用方法的方式会动态的变化。因此,动态绑定实现了OOP的多态性。当然,通过动态绑定,因为可以消除用于多选场景的条件逻辑,从而可以降低程序的复杂度。 动态绑定是Objective-C的一种继承特性,它不需要任何特定的API。使用动态绑定可以将消息选择器设置为在运行程序时确定的变量。使用:@dyna

2015-10-28 23:32:13 969

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除