<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[pwf2006的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/pwf2006</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; pwf2006]]></copyright><item><title><![CDATA[iOS Socket编程入门指北]]></title><link>https://blog.youkuaiyun.com/pwf2006/article/details/126217622</link><guid>https://blog.youkuaiyun.com/pwf2006/article/details/126217622</guid><author>pwf2006</author><pubDate>Sun, 07 Aug 2022 22:15:10 +0800</pubDate><description><![CDATA[Socket收发的消息我们如何区分消息类型呢？如何知道每一个包的大小呢？Protocol Buffer(Protobuf的全称）是一种支持多平台、多语言、可扩展的的数据序列化机制，相较于XML来说，Protobuf更小更快更简单，支持自定义的数据结构，用Protobuf编译器生成特定语言的源代码，如C++、Java、Python，目前Protobuf对主流的编程语言都提供了支持，非常方便的进行序列化和反序列化。Protobuf官网链接。...]]></description><category></category></item><item><title><![CDATA[iOS自建DNS之后对IP+Port测速]]></title><link>https://blog.youkuaiyun.com/pwf2006/article/details/121467300</link><guid>https://blog.youkuaiyun.com/pwf2006/article/details/121467300</guid><author>pwf2006</author><pubDate>Mon, 22 Nov 2021 13:47:36 +0800</pubDate><description><![CDATA[iOS自建DNS之后对IP+Port测速传统的Local DNS域名解析的弊端通过域名拿到IP之后，如何选用最快的一条链路
传统的Local DNS域名解析的弊端
客户端默认使用运营商的Local DNS来进行域名递归解析，然后将解析后的结果返回给客户端。这个过程当中经常会出现域名劫持，导致出现很多意想不到的结果。而且传统的 DNS 有很多问题，例如解析慢、更新不及时。因为缓存、转发、NAT问题导致客户端误会自己所在的位置和运营商，从而影响流量的调度。
为了解决这个弊端，就得自建域名解析服务来绕过本地的域名]]></description><category></category></item><item><title><![CDATA[APNS和Background Fetch相关问题总结]]></title><link>https://blog.youkuaiyun.com/pwf2006/article/details/106212079</link><guid>https://blog.youkuaiyun.com/pwf2006/article/details/106212079</guid><author>pwf2006</author><pubDate>Tue, 19 May 2020 12:38:20 +0800</pubDate><description><![CDATA[APNS和Background Fetch相关问题总结 1.1 Normal Push Notification1.1.1 概述1.1.2 deviceToken相关1.1.3 推送feedback接口1.1.4 badge点击不消失的问题1.1.5 定制push notification的推送时间段1.1.6 push notification的功能扩展1.1.7 收不到push notification的情况总结1.1.8 测试工具1.2 Silent Push Notification1.2.1 概述]]></description><category></category></item><item><title><![CDATA[Mars iOS开发中需要注意事项]]></title><link>https://blog.youkuaiyun.com/pwf2006/article/details/79005014</link><guid>https://blog.youkuaiyun.com/pwf2006/article/details/79005014</guid><author>pwf2006</author><pubDate>Mon, 08 Jan 2018 17:06:33 +0800</pubDate><description><![CDATA[前一段时间公司项目IM底层改成用Mars来开发,Mars客户端是基于C++来开发的,在刚开始使用的过程中也遇到了一些问题,现在总结如下:


对于客户端发起的心跳,服务器必须要有响应回包,否则长连接很快就会断掉.
对于客户端通过Mars发出去的请求,如果服务器端响应回包时必须要有seq(也可以叫其它名字),并且该字段的值要与客户端发过去的值相同.
客户端发出去的包不一定需要服务器端的回应,可能通过]]></description><category></category></item><item><title><![CDATA[NSOperationQueue 设置maxConcurrentOperationCount = 1,就是串行队列了吗?]]></title><link>https://blog.youkuaiyun.com/pwf2006/article/details/78131461</link><guid>https://blog.youkuaiyun.com/pwf2006/article/details/78131461</guid><author>pwf2006</author><pubDate>Fri, 29 Sep 2017 10:31:12 +0800</pubDate><description><![CDATA[在iOS多线程开发中,一般常用三种方式进行:
NSThread
GCD
NSOperationQueue配合NSOperation子类使用
具体这三类多线程在iOS中是如何开发的在这里就不多说了,不了解的可以上官网或者百度搜索.在GCD中我们可以创建串行队列,并且加到串行队列上的操作是依次进行的,即先加进去的代码先执行,后加进去的代码后执行.细心的同学可能也发现了在NSOperationQueue中]]></description><category></category></item><item><title><![CDATA[简单实现iOS通知中心的功能]]></title><link>https://blog.youkuaiyun.com/pwf2006/article/details/77989335</link><guid>https://blog.youkuaiyun.com/pwf2006/article/details/77989335</guid><author>pwf2006</author><pubDate>Fri, 15 Sep 2017 10:59:54 +0800</pubDate><description><![CDATA[iOS自带的NSNotification在日常使用中如果注册完不removeObserver的话会引发crash,开发者在开发过程中往往由于自己的疏忽而忘记写removeObserver,尤其在代码重构过程中很容易忽略掉.那么有没有好的办法自己实现一套通知中心的功能,而不用在observer的dealloc函数中removeObserver呢?答案是有的,iOS开发中经常用weak来修饰类的属性,当]]></description><category></category></item><item><title><![CDATA[iOS单例的创建与销毁]]></title><link>https://blog.youkuaiyun.com/pwf2006/article/details/77539792</link><guid>https://blog.youkuaiyun.com/pwf2006/article/details/77539792</guid><author>pwf2006</author><pubDate>Thu, 24 Aug 2017 18:42:27 +0800</pubDate><description><![CDATA[在iOS的日常开发经常要用到单例,单例一经创建就不会销毁,直到APP被杀掉的时候单例占用的空间才得以释放.现在比如我有一个自行车类,并且把它写成一个单例(共享自行车,呵呵),代码如下:#import "Bike.h"@implementation Bike+ (instancetype)sharedBike
{
    static Bike *bike;
    static dispatch_o]]></description><category></category></item><item><title><![CDATA[cocoapods 常用命令总结]]></title><link>https://blog.youkuaiyun.com/pwf2006/article/details/77531917</link><guid>https://blog.youkuaiyun.com/pwf2006/article/details/77531917</guid><author>pwf2006</author><pubDate>Thu, 24 Aug 2017 16:32:29 +0800</pubDate><description><![CDATA[1.pod lib create; 创建一个pod库,可以选择是否带一个Example工程;
2.pod init;在你的工程目录下执行之后,工程目录之下会多一个podfile文件;
3.pod install;在工程第一次使用或者中间有添加,删除,更新库的时候使用;
4.pod instal --verbose --no-repo-update;执行pod install 但不升级本地co]]></description><category></category></item><item><title><![CDATA[iOS pod库包含MRC的文件]]></title><link>https://blog.youkuaiyun.com/pwf2006/article/details/77244163</link><guid>https://blog.youkuaiyun.com/pwf2006/article/details/77244163</guid><author>pwf2006</author><pubDate>Wed, 16 Aug 2017 13:36:04 +0800</pubDate><description><![CDATA[在我们iOS开发过程中,碰到的大部分文件都是基于ARC内存管理的,但也免不了用到一些三方的MRC的代码,这里介绍两种方法来编写包括MRC文件的.podspec文件.
1).在podspec中指定requires_arc:false,同时指定requires_arc的文件,eg:
   

  s.requires_arc = false

  s.requires_arc = ['EL]]></description><category></category></item><item><title><![CDATA[UITableView通过AutoLayout自动计算行高]]></title><link>https://blog.youkuaiyun.com/pwf2006/article/details/76032996</link><guid>https://blog.youkuaiyun.com/pwf2006/article/details/76032996</guid><author>pwf2006</author><pubDate>Mon, 24 Jul 2017 17:15:37 +0800</pubDate><description><![CDATA[为了演示简单,cell中我们只包含了一个view和一个label,针对iOS8之前的iOS系统,我们需要进行如下设置:


    self.tableView = [[UITableView
alloc] initWithFrame:CGRectZero
style:UITableViewStylePlain];

    self.tableView.dataSource =
]]></description><category></category></item><item><title><![CDATA[即时通讯下数据粘包、断包处理实例（基于CocoaAsyncSocket）]]></title><link>https://blog.youkuaiyun.com/pwf2006/article/details/68061919</link><guid>https://blog.youkuaiyun.com/pwf2006/article/details/68061919</guid><author>pwf2006</author><pubDate>Wed, 29 Mar 2017 11:07:09 +0800</pubDate><description><![CDATA[本文转自：http://www.jianshu.com/p/2e16572c9ddc?utm_source=desktop&utm_medium=timeline


前言


本文旨以实例的方式，使用CocoaAsyncSocket这个框架进行数据封包和拆包。来解决频繁的数据发送下，导致的数据粘包、以及较大数据（例如图片、录音等等）的发送，导致的数据断包。

本文实例Github]]></description><category></category></item><item><title><![CDATA[深入理解Objective-C：Category]]></title><link>https://blog.youkuaiyun.com/pwf2006/article/details/66974077</link><guid>https://blog.youkuaiyun.com/pwf2006/article/details/66974077</guid><author>pwf2006</author><pubDate>Mon, 27 Mar 2017 17:39:06 +0800</pubDate><description><![CDATA[本文转自：http://tech.meituan.com/DiveIntoCategory.html

摘要
无论一个类设计的多么完美，在未来的需求演进中，都有可能会碰到一些无法预测的情况。那怎么扩展已有的类呢？一般而言，继承和组合是不错的选择。但是在Objective-C 2.0中，又提供了category这个语言特性，可以动态地为已有类添加新行为。如今category已经遍布于Objec]]></description><category></category></item><item><title><![CDATA[CocoaPods私有库配置笔记]]></title><link>https://blog.youkuaiyun.com/pwf2006/article/details/66968606</link><guid>https://blog.youkuaiyun.com/pwf2006/article/details/66968606</guid><author>pwf2006</author><pubDate>Mon, 27 Mar 2017 10:19:24 +0800</pubDate><description><![CDATA[本文转自：http://www.jianshu.com/p/4b63dfbd8be7


前情提要

公司项目一直在用CocoaPods管理第三方包，自己也想着将项目中的公用模块抽离出来独立的包。所以研究了一下。
准备工作
github创建私有库 如testSpecs.git
pod repo add testSpecs 
https://github.com/qgg/testS]]></description><category></category></item><item><title><![CDATA[深入分析 Objective-C block、weakself、strongself 实现原理]]></title><link>https://blog.youkuaiyun.com/pwf2006/article/details/66968558</link><guid>https://blog.youkuaiyun.com/pwf2006/article/details/66968558</guid><author>pwf2006</author><pubDate>Mon, 27 Mar 2017 10:15:00 +0800</pubDate><description><![CDATA[本文转自：http://www.jianshu.com/p/a5dd014edb13

Block是我们在日常OC编码中经常使用的特性，它可以非常便捷高效的编写和组织代码，可以让异步调用的代码更加的精炼易读。但是在日常开发过程中我们大部分情况都是写着教科书一般的代码来确保编码的正确,下面我们通过block的源码分析来看看block的实现原理。文章有点长，请耐心点哦，相信你一定有所收获的。
正]]></description><category></category></item><item><title><![CDATA[Objective-C Autorelease Pool 的实现原理]]></title><link>https://blog.youkuaiyun.com/pwf2006/article/details/65444557</link><guid>https://blog.youkuaiyun.com/pwf2006/article/details/65444557</guid><author>pwf2006</author><pubDate>Thu, 23 Mar 2017 15:45:44 +0800</pubDate><description><![CDATA[本文转自：http://www.jianshu.com/p/d6687291e486


内存管理一直是学习Objectie-C的重点和难点之一，尽管现在已经是ARC时代了，但是了解Objective-C的内存管理机制仍然是十分必要的。其中，弄清楚autorelease的原理更是重中之重，只有理解了autorelease的原理，我们才算是真正了解了Objective-C的内存管理机制。
]]></description><category></category></item><item><title><![CDATA[IOS 断点续传原理浅析]]></title><link>https://blog.youkuaiyun.com/pwf2006/article/details/65444343</link><guid>https://blog.youkuaiyun.com/pwf2006/article/details/65444343</guid><author>pwf2006</author><pubDate>Thu, 23 Mar 2017 15:34:09 +0800</pubDate><description><![CDATA[本文转自：http://www.jianshu.com/p/de263da8cdb0



断点续传概述:
断点续传就是从文件上次中断的地方开始重新下载或上传数据，当下载大文件的时候，如果没有实现断点续传功能，那么每次出现异常或者用户主动的暂停，都会去重头下载，这样很浪费时间。所以断点续传的功能就应运而生了


在说IOS断点续传之前，下面来简单介绍 HTTP 断点续传的原理
其]]></description><category></category></item><item><title><![CDATA[iOS KVO 实现原理]]></title><link>https://blog.youkuaiyun.com/pwf2006/article/details/65443915</link><guid>https://blog.youkuaiyun.com/pwf2006/article/details/65443915</guid><author>pwf2006</author><pubDate>Thu, 23 Mar 2017 15:05:18 +0800</pubDate><description><![CDATA[本文转自：https://www.mikeash.com/pyblog/friday-qa-2009-01-23.html

Welcome to the first Friday Q&A; of the new Presidential administration. Unlike Mr. Obama, I'm afraid of change and so this week's edit]]></description><category></category></item><item><title><![CDATA[iOS Socket提高APNs消息推送触达率]]></title><link>https://blog.youkuaiyun.com/pwf2006/article/details/56666751</link><guid>https://blog.youkuaiyun.com/pwf2006/article/details/56666751</guid><author>pwf2006</author><pubDate>Thu, 23 Feb 2017 10:42:34 +0800</pubDate><description><![CDATA[iOS APNs消息推送一直是各APP打造的一个亮点，用于把一些实时，重要的消息及时推送给客户。但是现实开发时，APNs服务器并不保证消息能及时送达APP端，这其中由网络原因，苹果APNs本身也会有一定的算法（猜测），iOS系统的的一些限制（iOS8之前不包含iOS8实际推送内容大小为256B，iOS8.0之后iOS9.0之前推送内容大小为2K,iOS9.0及以后推送内容为4K)等诸多原因，导致消]]></description><category></category></item><item><title><![CDATA[iOS中AES192 CBC PKCS7Padding 解码]]></title><link>https://blog.youkuaiyun.com/pwf2006/article/details/56664633</link><guid>https://blog.youkuaiyun.com/pwf2006/article/details/56664633</guid><author>pwf2006</author><pubDate>Thu, 23 Feb 2017 08:57:57 +0800</pubDate><description><![CDATA[1.什么是AES?
AES(Advanced Encryption Standard，AES)高级加密标准,是美国联邦政府采用的一种区块加密标准。这个标准用来替换原来的DES，该算法为比利时密码学家Joan Daemen和Vincent Rijmen所设计，所以又称高级加密标准Rijndael加密法。
2.什么是AES128,AES192,AES256?
AES采用的是对称加密，密钥长度支持]]></description><category></category></item><item><title><![CDATA[iOS访问类的私有成员变量及私有方法]]></title><link>https://blog.youkuaiyun.com/pwf2006/article/details/52254692</link><guid>https://blog.youkuaiyun.com/pwf2006/article/details/52254692</guid><author>pwf2006</author><pubDate>Fri, 19 Aug 2016 22:38:29 +0800</pubDate><description><![CDATA[本文主要介绍一下如何访问类的私有成员变量以及类的私有方法,这里以下面这个类来举例:


@interface HomeController : 
UIViewController {

    NSString *name2;

}




@property (nonatomic,
copy) NSString *name3;




@end]]></description><category></category></item></channel></rss>