objective-c的数据类型
int i =10;
i +=10;
NSLog(@"i=%d",i);
int a = 2;
int b = 0,c=3;
a *=b + c;
NSLog(@"a=%d",a);
C的基本类型 C的5种类型:char int float double void 并且仍然可以使用 short long signed unsigned 等修饰符
此外C语言的一些复合类型就是id SEL nil NULL等
id是指向任意对象的指针,类似与C语言的void* .这里任意对象是指objective-C所有的继承与NSObject类的实例。在cocoa中,NSObject是所有类的根类,所以可以用id指向任何类型的对象。
SEL用来指向任何方法的定义 实际上呢就是const char* 类似与C语言的函数指针,要创建SEL的类型有两种方法:一种是通过@selector()关键字
SEL doSomeThing = @selector(Mymethod)
SEL doSomeThing = @selector(Mymethod:)
SEL doSomeThing = @selector(Mymethod: withArgument:)
如果我们有了SEl,我们就可以让一个对象来执行它。
用 performSelector: or performSelector:withObject: 方法
[obj performSelector:];
[obj performSelector:shootAtSelector withObject:];
在UIButton 里面
[button addTarget:self action:@selector(myMethod:) ];
另一种是用NSSelectorFromString()我们把方法签名以字符串的方式作为参数传递,这种方式类似objective-c的反射机制
BOOL类型
C语言拥有布尔数据类型bool,它具有true值和false值
在objective-C里面BOOL YES NO YES是非零 NO就是零
signed char 可以直接用%d来输出
if (flag) { }
if (!flag) { }
if (flag == YES) { }
if (flag == NO) { }
if (flag != NO) { }
nil
#define nil ((id)0)
nil表示0值指针nil表示不指向任何东西
可以隐含测试是否为nil。
if (obj) { }
想nil发送消息就不会崩溃程序,事实上什么也不会执行,如果有返回值,那就返回0。
int i = [obj methodReturnsInt];
除了一个情况,如果返回的是个C结构体怎么办?如果你给一个nil的返回C结构体的对象发消息,你得到的是一个未定义的C结构体。这个东西是随机的并不是你要想的。
CGPoint p = [obj getLocation];
id someObj = [[Obj alloc] init];
[someObj doSomeThing];
if(someObj ){...}
Nil
一个空指针指向objective-c的类
NULL 一个基于C风格的内存指针指向任何东西
#define NULL ((void *)0
NSNull 一个类定义了一个单例对象用来表示集合里的空值
NSObject *obj1 = [NSNull null];
NSArray *arr1 = [NSArray arrayWithObjects:@"One", @"TWO", obj1, @"three" ,nil];
for (NSString *str in arr1) {
if (![str isEqual:[NSNull null]]){
NSLog(@"array object: %@", [str lowercaseString]);
}
}
cocoa foundation里的NS开头的类 core foundation以CF开头的比如:
NSString NSArray NSNumber NSDictionay
NS结构体
cocoa foundation里定义了大量的结构体 如NSRange,NSPoint.NSSize等
objective-c里的变量声明和C完全相同:类型<变量 名字>如果声明对象加上指针符号“*” 以后我们经常见到 NSString * NSArray *
常量的声明方法
枚举
typedef enum{
kCircle,
kRectangle,
kOblateSpheroid
} ShapeType;
静态变量
static NSString *obj = @"qiqi";
宏预处理
#define API @“http://....”
#define KButtom 100
objective-c包含头文件 #import 之前C是#include但是想C C++为了防止头文件重复包含需要经常这样定义.h
#ifndel_MYOBJ_H
#define _MYOBJ_H
#endif
objective-C用import这样更加简化
以后也会碰到@Class 这样情况我们只要要知道某个对象属于某个类而已
#import“”和#import<>双引号表示自己创建的文件,一般先搜索本地目录如果没有就跳转其他位置搜索,<>指定系统目录搜索
#pragma mark -命令,当单个文件的代码比较多的时候这样比较容易组织管理代码,看着比较清晰
本文出自 “人魔七七 QQ群:124525793” 博客,谢绝转载!