问题提出 在学习IOS时候,碰到一个函数NSStringFromCGPoint (UIGeometry.h) 其原型是 UIKIT_EXTERN NSString *NSStringFromCGPoint(CGPoint point); 原型分析 NSString* , CGPoint好理解, 前者是库自带的字符串类型, 后者是一个表示2维平面上的点的结构体.但是UIKIT_EXTERN是什么呢?查找发现 UIKitDefines.h #ifdef __cplusplus #define UIK…
在 objc-api.h 里面有很多关于__attribute__ 的定义. 例如 #if !defined(OBJC_VISIBLE) # if TARGET_OS_WIN32 # if defined(BUILDING_OBJC) # define OBJC_VISIBLE __declspec(dllexport) # else # define OBJC_VISIBLE __declspec(dllimport) # endif # else # define OBJC_VISIBLE…
试想这样的情景,程序调用某函数A,A函数存在于两个动态链接库liba.so,libb.so中,并且程序执行需要链接这两个库,此时程序调用的A函数到底是来自于a还是b呢? 这取决于链接时的顺序,比如先链接liba.so,这时候通过liba.so的导出符号表就可以找到函数A的定义,并加入到符号表中,链接libb.so的时候,符号表中已经存在函数A,就不会再更新符号表,所以调用的始终是liba.so中的A函数 这里的调用严重的依赖于链接库加载的顺序,可能会导致混乱:gcc的扩展中有如下属性__attr…
一.应用图片标准iOS控件里的图片资源,苹果已经做了相应的升级,我们需要操心的是应用自己的图片资源.就像当初为了支持iPhone 4而制作的@2x高分辨率版本(译者:以下简称高分)图片一样,我们要为iPad应用中的图片制作对应的高分版本.我知道不少开发者很有预见性的早在iOS 5.0 SDK上就完成了这一步升级.可是我还是要强调一点,那就是之前 Michael Jurewitz (@Jury)在推上提到过的: — 如果想让你的高分图片显示在新iPad上,你必须用Xcode 4.3.1 连同iOS…
__attribute__ Directives Reference 1. __attribute__ directives in Objective-C (AAAA+) (Read Again) https://blog.twitter.com/2014/attribute-directives-in-objective-c https://blog.twitter.com/engineering/en_us/a/2014/attribute-directives-in-objective-c…
本文目录 iOS宏的经典用法 Apple的习惯 __attribute__ iOS宏的经典用法 1.常量宏.表达式宏 #define kTabBarH (49.0f) #define kScreenH [UIScreen mainScreen].bounds.size.height #define isScreenWidthEqual320 (fabs([UIScreen mainScreen].bounds.size.width - 320) < DBL_EPSILON) 2.带参数的宏 //…
制作一个共享库 /* a.h */ int func(); /* a.c */ #include <stdio.h> #include "a.h" int func() { printf("### func ###\n"); ; } gcc -shared -o liba.so a.c -fPIC main.c #include "a.h" int main() { func(); } gcc -o main main.c -la -…
转自:https://blog.csdn.net/starstarstone/article/details/7493144?utm_source=tuicool&utm_medium=referral visibility用于设置动态链接库中函数的可见性,将变量或函数设置为hidden,则该符号仅在本so中可见,在其他库中则不可见. g++在编译时,可用参数-fvisibility指定所有符号的可见性(不加此参数时默认外部可见,参考man g++中-fvisibility部分):若需要对特定函…
宏定义的常见用法: 定义一段代码,或指定字符串抽成宏. const(常量): 当有字符串常量的时候,苹果推荐我们使用const,苹果经常把常用的字符串定义成const 宏定义与const的区别: 编译时刻:宏是预编译(编译之前处理),const是编译阶段. 编译检查:宏不做检查,不会报编译错误,只是替换,const会编译检查,会报编译错误. 宏的好处:宏能定义一些函数,方法. const不能. 宏的坏处:使用大量宏,容易造成编译时间久,每次都需要重新替换. 注意:很多Blog都说使用宏,会消耗很…
开发当中用到通知,通知的定义必须要有一个字符串标识通知的名字.一般可以直接写一个字符串,在通知创建和监听的时候直接写这个字符串. 但这样做非常不好,随手创建写代码当时很舒服,但是后来维护的时候发现通知监听会散落到不同的文件,如果要改通知的名字,每个地方都要改, 将会非常麻烦. 如下面这样 //发出通知,在一个控制器 NSNotification *noti = [NSNotification notificationWithName:@"kNotificationName" objec…