- 博客(19)
- 资源 (3)
- 收藏
- 关注
转载 Objective-C 原子属性
Objective-C 在声明一个属性的时候,想必大家都是不用经过大脑思考就会写 @property (nonatomic, ...。我们都知道属性可以是 nonatomic 也可以使 atomic 的,但是好像几乎所有属性在声明的时候 nonatomic,atomic 的属性几乎没出现过。atomic 修饰符仿佛已被大家遗忘。实际上,如果声明属性时既不写 atomic 也不写 nonat...
2018-07-26 21:13:01 521
转载 避免使用 GCD Global队列创建Runloop常驻线程
避免使用 GCD Global队列创建Runloop常驻线程本文对应 Demo 以及 Markdown 文件在仓库中,文中的错误可以提 PR 到这个文件,我会及时更改。目录 避免使用 GCD Global队列创建Runloop常驻线程 GCD Global队列创建线程进行耗时操作的风险 避免使用 GCD Global 队列创建 Runloop 常驻线程 单一 Runlo...
2018-07-25 17:05:08 890
转载 iOS 统计打点那些事
统计打点是 App 开发里很重要的一个环节,App 的运行状态、改版后的效果、用户的各种行为等都需要打点,市面上也有不少可供选择的第三方库。 假设产品有这么个需求:当用户在详情页点击购买按钮时,记录一下事件。我们实现起来大概会是这样 1234567 // DetailViewController.m- (void)onBuyButto...
2018-07-24 21:11:58 885
转载 GCD使用经验与技巧浅谈
前言GCD(Grand Central Dispatch)可以说是Mac、iOS开发中的一大“利器”,本文就总结一些有关使用GCD的经验与技巧。dispatch_once_t必须是全局或static变量这一条算是“老生常谈”了,但我认为还是有必要强调一次,毕竟非全局或非static的dispatch_once_t变量在使用时会导致非常不好排查的bug,正确的如下: 12...
2018-07-24 17:55:27 293
转载 Objective-C的“多继承”——消息转发
当单继承不够用,很难为问题域建模时,我们通常都会直接想到多继承。多继承是从多余一个直接基类派生类的能力,可以更加直接地为应用程序建模。但是Objective-C不支持多继承,由于消息机制名字查找发生在运行时而非编译时,很难解决多个基类可能导致的二义性问题。不过其实 Objective-C 也无需支持多继承,我们可以找到如下几种间接实现多继承目的的方法:消息转发 delegate和prot...
2018-07-24 11:09:29 254
转载 深入理解Objective-C:Category
摘要无论一个类设计的多么完美,在未来的需求演进中,都有可能会碰到一些无法预测的情况。那怎么扩展已有的类呢?一般而言,继承和组合是不错的选择。但是在Objective-C 2.0中,又提供了category这个语言特性,可以动态地为已有类添加新行为。如今category已经遍布于Objective-C代码的各个角落,从Apple官方的framework到各个开源框架,从功能繁复的大型APP到简单的应...
2018-07-12 17:49:44 182
转载 深入浅出iOS事件机制
本文章将讲解有关iOS事件的传递机制,如有错误或者不同的见解,欢迎留言指出。iOS的事件有好几种:Touch Events(触摸事件)、Motion Events(运动事件,比如重力感应和摇一摇等)、Remote Events(远程事件,比如用耳机上得按键来控制手机),其中最常用的应该就是Touch Events了,基本存在于每个app的每个地方,今天我们主要就讲讲它,至于其他两个事件有兴趣的可以...
2018-07-10 21:08:27 159
转载 UIView的hitTest和pointInside方法
官方描述- (BOOL)pointInside:(CGPoint)point withEvent:(UIEvent *)event;Returns a Boolean value indicating whether the receiver contains the specified point.- (UIView *)hitTest:(CGPoint)point withEvent:(UIE...
2018-07-10 20:35:57 479
转载 iOS网络请求在Controller退出后是否应该被取消?
一个编写iOS代码的经典场景:用户进入某个Controller,发起Http网络请求从Server获取数据,在数据返回之前用户退出了Controller。此时是否需要Cancel之前发出的网络请求呢?如果请求的数据只在当前Controller产生内容,结论当然是需要Cancel,虽然我知道不少iOS程序员因为偷懒而忘了取消。我们用工程的思维,深入本质,一起看下这背后都发生了什么,如果不Cancel...
2018-07-10 16:40:38 1061
转载 深度优化iOS网络模块
几乎每一个讲究的iOS项目都会有一个「网络模块」,大部分的网络请求都是通过HTTP完成,使用成熟的第三方库诸如AFNetworking很容易搭建一个功能简易的网络模块。但这一模块要优化好却没那么简单,是个旷日持久的工作,笔者根据自己多年的“填坑”经验,总结一下深度优化iOS项目网络模块的方方面面,也给自己做下知识梳理。预热网络模块的接口设计不在本文讨论之列,设计思路有些偏个人口味,我只探讨一些可以...
2018-07-10 11:30:49 511
转载 iOS网络请求优化之DNS映射
iOS网络请求优化之DNS映射绝大多数网络请求的第一步都是DNS解析,解析请求根据当时网络情况不同,各平台的DNS缓存策略差异等因素,对移动端app整体网络性能会产生或大或小的影响。移动端app网络性能优化涉及到很多方面,DNS映射只是其中一环,也是十分重要的一环,因为它带来的好处不仅仅是降低网络请求的延迟。降低DNS请求带来的延迟客户端app的请求第一步都是DNS解析,但由于cache的存在使得...
2018-07-10 10:26:05 856
转载 Block&&Delegate
作者:黄兢成链接:https://www.zhihu.com/question/29023547/answer/109570584来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。block 和 delegate 都可以通知外面。block 更轻型,使用更简单,能够直接访问上下文,这样类中不需要存储临时数据,使用 block 的代码通常会在同一个地方,这样读代码也连贯。...
2018-07-09 11:27:41 157
原创 GCD中如何取消线程
在iOS开发中,常用NSOperation和GCD来做多线程的开发,NSOperation有cancel可以取消还未执行的线程。但是没办法做到取消一个正在执行的线程。 GCD目前有两种方式可以取消线程,如下1、类似NSOperation一样,可以取消还未执行的线程。但是没办法做到取消一个正在执行的线程。可以取消还未执行的线程有两种方式:1.1 iOS8后采用提供的API,...
2018-07-07 10:24:54 3767
转载 教你如何取消GCD任务
GCD 是一种非常方便的使用多线程的方式。通过使用 GCD,我们可以在确保尽量简单的语法的前提下进行灵活的多线程编程。在 “复杂必死” 的多线程编程中,保持简单就是避免错误的金科玉律。然而,GCD不像NSOperation那样可以调用 -(void)cancel 取消一个操作的执行(注意这里的取消只是针对未执行的任务设置finished = YES,如果这个操作已经在执行了,那么我们只能等其操...
2018-07-06 15:09:28 2979
原创 富文本拼接封装,包含空值处理。
富文本的拼接经常要写一大串代码,有的时候还要拼接图片,才能达到效果,还容易搞错。如果有服务端返回的空值,还会造成程序crash。这里就进行了封装。包含了空值处理。NSAttributedString+AtrtributeText.h文件#import <Foundation/Foundation.h>@import UIKit;@interface NSAttributedSt...
2018-07-06 10:22:52 716
原创 TableView的headerView或者FooterView的高度问题
在iOS开发中,经常碰到headerView或者FooterView的高度问题,headerveiew和footerView经常根据业务需求高度发生变化,需要调接口。要做到正确的高度,需要进行以下两个步骤: 1、重新设置tableview的headerView或者FooterView,即tableView.tableFooterView = FooterView或tableV...
2018-07-05 14:52:49 5709
转载 NSURLProtocol 全攻略
一位著名的iOS大神Mattt Thompson在http://nshipster.com/nsurlprotocol/ 博客里说过,说“NSURLProtocol is both the most obscure and the most powerful part of the URL Loading System.”NSURLProtocol是URL Loading System中功能最强大...
2018-07-02 19:56:57 2807
转载 常用排序算法总结(二)
目录计数排序基数排序桶排序 上一篇文章中我们总结了常用的比较排序算法,主要有冒泡排序,选择排序,插入排序,归并排序,堆排序,快速排序等。 这篇文章中我们来探讨一下常用的非比较排序算法:计数排序,基数排序,桶排序。在一定条件下,它们的时间复杂度可以达到O(n)。 这里我们用到的唯一数据结构就是数组,当然我们也可以利用链表来实现下述算法。 计数排序(Counting Sort) ...
2018-07-02 10:54:46 160
转载 常用排序算法总结(一)
目录冒泡排序 鸡尾酒排序 选择排序插入排序二分插入排序 希尔排序 归并排序堆排序快速排序 我们通常所说的排序算法往往指的是内部排序算法,即数据记录在内存中进行排序。 排序算法大体可分为两种: 一种是比较排序,时间复杂度O(nlogn) ~ O(n^2),主要有:冒泡排序,选择排序,插入排序,归并排序,堆排序,快速排序等。 另一种是非比较排序,时间复杂度可以达到O(n),...
2018-07-02 10:54:05 132
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人