dealloc内部原理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
1.调用 -release :引用计数变为零
* 对象正在被销毁,生命周期即将结束.
* 不能再有新的 __weak 弱引用,否则将指向 nil.
* 调用 [self dealloc]
2. 父类调用 -dealloc
* 继承关系中最直接继承的父类再调用 -dealloc
* 如果是 MRC 代码 则会手动释放实例变量们(iVars)
* 继承关系中每一层的父类 都再调用 -dealloc
3. NSObject 调 -dealloc
* 只做一件事:调用 Objective-C runtime 中的 object_dispose() 方法
4. 调用 object_dispose()
* 为 C++ 的实例变量们(iVars)调用 destructors
* 为 ARC 状态下的 实例变量们(iVars) 调用 -release
* 解除所有使用 runtime Associate方法关联的对象
* 解除所有 __weak 引用
* 调用 free()
阅读全文

ios架构

要写易删除,而不是易扩展的代码

好的文章总是见解独到,功底深厚而逻辑清晰。这是一篇关于如何设计、架构代码的文章。文章的观点新颖而有力。作者的观点是,我们所做的一切 —— 重构、模块化、分层,等等,都是为了让我们的代码易于被删改,都是为了让遗留代码不成为我们的负担,而不是为了代码复用。

注释和共享

ios对象和指针互转

 //取self指针地址
NSString *fooString = [NSString stringWithFormat: @"%ld", (long)self];
long address = [fooString  longLongValue];
//指针转对象
TestClasss *newInstance = (TestClasss *)address;
//测试对象是否成功
[TestClasss testFunc];

注释和共享

最近在项目中遇到一个问题ios7以下的设备才会出现:

attibuteLabel 增加了自定的link,事件增加上去了。颜色没有变化。
进过debug发现。
kCTForegroundColorAttributeName
NSForegroundColorAttributeName
这两个属性在ios7+的设备是等价的。
但是在ios7-分别代表不同的属性。

阅读全文

ios 动态注入代码

1.mac安装xcode 插件 下载地址
2.工程引入.a文件 (可在下载地址的文件夹中找到工程,请自行编译,或则pod 搜索 dyci)
3.配置工程环境:
a.buildsettings: Enable Code Coverage Support 改为NO
b.buildsettings:Other Link Flags : -force_load 加 .a所在路径

阅读全文

method swizzl 示例

使用方法:新建一个catogary,把下面代码分别拷贝到.h和.m文件中,
介绍:foundation框架的参数错误,数组越界等异常捕获,确保app不会崩溃。
方法:运行时技术,在运行时将系统方法替换为我们自己实现的方法
ps:本文只实现了foundation库的部分方法,其实还可以尝试实现UIKit的方法,实现页面数据和用户行为统计等

.h文件内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#import <Foundation/Foundation.h>

@interface NSArray (swArray)

- (id)sw_objectAtIndex:(NSUInteger)index;

@end

@interface NSMutableArray (swMutableArray)

- (id)sw_objectAtIndex:(NSUInteger)index;
- (void)sw_insertObject:(id)anObject atIndex:(NSUInteger)index;

@end

@interface NSMutableDictionary (swMutableDictionary)

- (void)sw_setObject:(id)anObject forKey:(id<NSCopying>)aKey;

@end

阅读全文

转载:起底多线程同步锁(iOS)
1、@synchronized(){}

Objective-C同步语法能够实现对block内的代码片段加锁, 可以指定任意一个Objective-C对象(id指针)作为锁“标记”,该语法将“标记”理解为token;

2、NSLock、NSRecursiveLock:

典型的面向对象的锁,即同步锁类,遵循Objective-C的NSLocking协议接口,前者支持tryLock,后者支持递归(可重入);

3、NSCondition、NSConditionLock:

基于信号量方式实现的锁对象,前者提供单独的信号量管理接口,相比后者用法上可以更为灵活,而后者在接口上更为直接、实用;

阅读全文

running pig

running pig


IOS Developer


nanjing