THEOS makefile

转自https://www.h4ck.org.cn/2013/07/theos-makefile/

theos的makefile写法与其他linux/unix环境下的makefile写法大同小异,但是对于makefile不熟悉的在导入一些dylib或者framework的时候就会变得很蛋疼。

对于framework可以直接通过Frameworks和private frameworks来导入,但是dylib文件却不能那么简单的写进去,如果要引用zlib,那么如果写成xxx_LDFLAGS = -zlib,虽然在编译的时候不会提示找不到对应的lib库但是却会提示找不到相关的符号。

- 阅读剩余部分 -

Clang Attributes 黑魔法小记

Clang Attributes 是 Clang 提供的一种源码注解,方便开发者向编译器表达某种要求,参与控制如 Static Analyzer、Name Mangling、Code Generation 等过程,一般以 attribute(xxx) 的形式出现在代码中;为方便使用,一些常用属性也被 Cocoa 定义成宏,比如在系统头文件中经常出现的 NS_CLASS_AVAILABLE_IOS(9_0) 就是 attribute(availability(...)) 这个属性的简单写法。

常见属性的介绍,可以看 NSHipster 的介绍文章 和的 twitter 的介绍文章。本文还会介绍几个有意思的 “黑魔法” Attribute,说不定在某些场景下会起到意想不到的效果哦~

以下测试都以 Xcode 7.3 ( Clang 3.8 ) 为准

objc_subclassing_restricted

使用这个属性可以定义一个 Final Class,也就是说,一个不可被继承的类,假设我们有个名叫 Eunuch(太监) 的类,但并不希望有人可以继承自它:

- 阅读剩余部分 -

程序跟踪想着代码

// ptrace(PT_DENY_ATTACH, 0, 0, 0);

size_t size = sizeof(struct kinfo_proc);
struct kinfo_proc info;
int ret, name[4];
memset(&info, 1, size);
name[0] = CTL_KERN;
name[1] = KERN_PROC;
name[2] = KERN_PROC_PID;
name[3] = getpid();

ret = sysctl(name, 4, &info, &size, NULL, 0);
NSLog(@"%d, %d, %d", ret, info.kp_proc.p_flag & P_TRACED, info.kp_proc.p_traceflag);

巧用 __attributes__

objc_boxable

OC可能你经常会看到@(100)等用法。不用奇怪,就是这个Function attributes
使用示例:

struct attribute((objc_boxable)) some_struct {
int i;
};
union attribute((objc_boxable)) some_union {
int i;
float f;
};
typedef struct attribute((objc_boxable)) _some_struct some_struct;

some_struct ss;
NSValue *boxed = @(ss);

- 阅读剩余部分 -