用 Python 写脚本发送工作周报

事情的起因是这样的,每周都要发送工作周报,标题是需要的固定的格式(方便规则收信),比如 【工作周报】 xxx 11.20-11.24,发送和抄送也是给固定的人,企业邮箱还没有模板,所以每次发邮件都要复制粘贴标题、发送人和抄送人,只有内容是手写,便萌发了用脚本发送邮件的想法。 用脚本只需要第一次使用的时候配置收件人、抄送人和标题的格式,之后就只需要: 双击脚本文件 输入时间,如 ...

Objc 中 Block 的实现原理

Objc 中的 Block 其实是一个对象,之前也说过 Objc 中对象的结构 来看下 Block 的实现,新建 TooT.m 文件写一个 func_TooT 函数: void func_TooT(void) { int tt_value = 0; void (^bt)(void); bt = ^(){ printf("%d",tt_value);...

AFNetworking 源码阅读

版本:AFNetworking 3.1.0 AFNetworking 主要的几个类或协议: AFURLSessionManager AFHTTPSessionManager AFNetworkReachabilityManager AFSecurityPolicy <AFURLRequestSerialization> <AFURLRe...

iOS 中集合如何弱引用对象

1. 使用 NSValue NSValue 可以弱引用保存一个对象,我们可以使用这种方法间接的引用。 NSValue *value = [NSValue valueWithNonretainedObject:@selector(class)]; [array addObject:value]; 2. 使用 NSPointerArray,NSMapTable,NSHashTable ...

不要滥用懒加载

写代码是一种习惯的养成,一种生活的态度。 有一次同事看着我写的代码说,你为什么要这么写啊? 我看了一下,原来是在 ViewController 和 Cell 里初始化视图,还有数据模型数组的时候,我都是用的懒加载(Lazy-Load)。 为什么这么喜欢用懒加载来实例化一个属性呢? 以前学 iOS 开发的时候, 觉得懒加载可以延迟加载,需要的时候才去加载数据; 数组和字典等集...

Swift 中的类和结构体

Swift 中的结构体的能力被大大加强,不仅可以拥有属性,还以有方法、构造函数、甚至是扩展和遵守协议。这样的结构体和类有很多相同点: 属性:存储数据 方法:提供一些功能 下标:可以使用下标语法 构造器:生成初始化值 扩展:增加功能 协议:提供某种通用功能 当然,类和结构体也有很多不同的地方,类还有许多独有的附加功能: 继承:一个类可以继承另一个类的特征...

iOS开发中多线程的那些事

iOS开发深入之后还是要接触多线程和runloop的,写篇博客讲解、记录下iOS开发中的多线程技术。 线程、进程 什么是线程、进程   有的人说进程就像是人的脑袋,线程就是脑袋上的头发~~。其实这么比方不算错,但是更简单的来说,用迅雷下载文件,迅雷这个程序就是一个进程,下载的文件就是一个线程,同时下载三个文件就是多线程。一个进程可以只包含一个线程去处理事务,也可以有多个线程。 多线...

runtime(四) method swizzling 与AOP编程

什么是 AOP : (site: baike.baidu.com),引用百度百科中的解释就是: 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务...

runtime(三) Objective-C 的消息转发机制与动态添加方法

在上上一篇博客 runtime系列(一) objc_msgSend 中介绍了运行时的消息传递机制,但是却没有说对象收到消息却无法解读该怎么办。本篇博客就着重介绍当消息传递时无法解读的时候就会启动的 消息转发机制( message forwarding )。 开发可能经常会遇到这种情况: 2016-04-20 13:14:07.391 runtime[1096:22076] *** T...

runtime(二) 给对象、分类添加实例变量

在开发中有时候想给对象实例添加个变量来存储数据,但又无法直接声明,比如说既有类的分类。这个时候我们就可以通过 关联对象 在运行时给对象关联一个 对象 来存储数据。(注意:并不是真实的添加了一个实例变量) 关联对象 可以给某个对象关联其他对象并用key来区分其他对象。需要注意的是,存储对象的时候要指明 存储策略,用来维护对象的内存管理语义。存储策略是 objc_AssociationPoli...

runtime(一) objc_msgSend

调用方法(函数)是语言经常使用的功能,在 Objective-C 中专业一点的叫法是 传递消息(pass a message)。Objective-C 的方法调用都是 动态绑定 ,而C语言中函数调用方式是 静态绑定 ( static binding ),也就是说,在编译时期就能决定和知道在运行时所调用的函数。 以下面代码为例: void sayHello(){ } void say...

runtime(零) Objc 中类和对象的本质

Objc 中任何对象都可以称之为 id 类型,那么看下在 objc.h 对 id 类型的定义: /// A pointer to an instance of a class. typedef struct objc_object *id; 注释中的描述是 一个指向类的实例的指针,那么是不是意味一个类的实例即对象就是一个 objc_object 结构体呢?再看源码: /// An o...

Hexo + coding 博客的搭建和优化

以后会持续更新的~ 博客在于内容而不在于形式,反反复复折腾体验了几个主题。以后或许便会稳定不在折腾。 前段时间用Github上Pages服务配合Hexo搭建了自己的博客,后来整理下记录下过程。 后来将主题换为 next (最终是使用fexo),所以更新一下,方便后来人,也便于自己再用到来查看 从写博客到在网页上展示的过程是这样的,用MarkDown写下自己的博客内容,通过H...

序言

关于我 记得刚从事工作的时候,经常性的会遇到困难而不知所措。幸而在网上能找到很多牛人前辈们的技术博客能将问题和开发中的知识深入浅出的剖析,给予了我很大的帮助。于是,那会我便下定决心以后有机会一定要写自己的博客。 写这个博客主要作为学习以用,记录自己在生活、学习和工作中的点点滴滴。 既可以温故而知新,也可查漏补缺,方便自己回头查找使用方便,或能帮助他人也是好的。 Update: ...