iOS: #define

zz/2024/6/13 21:35:15

typedef与#define的区别。

http://www.sf.org.cn/article/base/200608/18988.html


#define 是宏定义,所谓的宏定义,就是将某段代码、地址、字符串等一串的文字,用一个宏来代替。#define是一种预处理。

#define与typedef功能类似,但它除了定义数据类型外,还可以定义给变量、语句等等定义,还可以包含参数。#define的原理是文本替换

#define INTEGER int
//把int定义成INTEGER
#define PRINTNUM(i) NSLog(@"%d",i)
//把后面的输出语句定义成带参数的PRINTNUM
int main (int argc, const char * argv[])
{@autoreleasepool {INTEGER i=5;NSLog(@"%d",i);PRINTNUM(555);}return 0;
}

#define最常见的用法是定义常量

#define MAX_VOLUME 11 

#define kDatabaseName @"database.sqlite3"


经常采用的一种做法是,把#define放置到一个头文件中,然后,将其包含到各种源文件中。这样,就可以通过在头文件中更改单个的值,从而改变该常量在所有源文件中的值。传统的C对于定义常量所使用的命名惯例是,使用全部大写字母。传统的Apple命名惯例是以一个k开始常量名称,剩下的名称使用CamelCase法命名:

#define kMaximumVolume 11 

#define kUrl @"http://google.com" 



Say again,#define的原理是文本替换。#define定义时并不会真正去执行它所代表的东东,而是当真正在用到这个define的值时,会进行文本替换然后才执行

例1,

#define PIETWO 3.14159*2

上面预定义了一个PIETWO,其代表3.14159*2,但并不是它已经执行了3.14159*2这个运算。而是当你使用这个PIETWO时,

float x = PIETWO * 10

这时就会用 3.14159*2 来替换PIETWO,然后才来进行运算。

例2 在AppDelegate.m里定义了

#define ApplicationDelegate ((AppDelegate *)[UIApplication sharedApplication].delegate)

这并不表示“执行了 ((AppDelegate *)[UIApplication sharedApplication].delegate) 然后把这段代码的返回值赋给ApplicationDelegate",而是表示”ApplicationDelegate这个变量就代表 ((AppDelegate *)[UIApplication sharedApplication].delegate) 这段代码,当用到ApplicationDelegate这个变量时,就用这段代码来ApplicationDelegate并执行。
如在你的viewcontroller.m
import "AppDelegate.h"
....
ApplicationDelegate.isLogin=YES;


由于#define实际上是作为文本替换,它甚至可以用来定义运算符
#define EQUALS ==
使用时为
if(value1 EQUALS value2)







http://www.ngui.cc/zz/2731646.html

相关文章

Raphael无法处理event的问题!!!

当你用下列代码画一个矩形,然后click it,照例应该会popup alert var paper Raphael("canvas", 600, 480); var rect paper.rect(10, 40, 50, 50); rect.click(function () {alert(hello); }); 但实际上并不会popup alert,是…

iOS: NSUserDefaults issues

NSUserDefaults用于存储一些app setting。当你关闭app之后再打开后,之前存储的setting依然可以从NSUserDefaults里读取。注意:密码最好不要存储在NSUserDefaults里,要存储也必须用AES/DES加密存储,更安全的方法是 https://github.…

Hibernate: cannot simultaneously fetch multiple bags 问题的解决办法

如果在一个pojo里使用超过一个List的变量,则会出现这个错误 详见: http://www.quanlei.com/2011/10/2817.html 他提供了4个解决方法,我采用方案3: 改变FetchMode为Fetch(FetchMode.SUBSELECT) 其他参考links: http://www.mkyong.…

iOS: UI 开发

中文 http://blog.csdn.net/column/details/zhf156.html Table View http://www.raywenderlich.com/312/beautiful-table-view-helper-class http://cocoawithlove.com/2009/04/easy-custom-uitableview-drawing.html http://cocoawithlove.com/2010/12/uitableview-co…

iOS: login window design

QuickDialog https://github.com/escoz/QuickDialog QQ登录界面demo http://www.cocoachina.com/bbs/read.php?tid69074&page1 Login interface design http://www.photoshop-plus.co.uk/2012/04/13/clean-mobile-login-screen-tutorial/ iPhone Modal View Smalle…

iOS: Classes for fetching and parsing XML or JSON via HTTP

http://cocoawithlove.com/2011/05/classes-for-fetching-and-parsing-xml-or.html

iOS: 2 Xib's with the same File's Owner for 1 IBOutlet object?

http://stackoverflow.com/questions/8978654/2-xibs-with-the-same-files-owner-for-1-iboutlet-object 若2个xib的file owner都指向同一个view controller,那么在2个xib不会同时被load的情况下,分别在不同xib上的控件可以指向view controller里的同一个…

Android: google play graphic assets guide

http://support.google.com/googleplay/android-developer/bin/answer.py?hlen&answer1078870

[iOS] ARC, @property 关键字

https://docs.google.com/document/d/1ZVV5RTzPMUreiFdAMws3jxi2i5Q49iClsGl6JQFwVGg/edit?uspsharing

Reset cert and provisioning profile for appwith push notification feature

参考文档: APNS tutorial: http://www.raywenderlich.com/32960/apple-push-notification-services-in-ios-6-tutorial-part-1 之前写的apns笔记:http://blog.csdn.net/totogogo/article/details/7376214 注意:在xcode里开发带notification…