为什么80%的码农都做不了架构师?>>>
周末临时买来Mac mini, 配上蓝牙鼠标,键盘(非apple, apple贵啊),+个DVI线(apple配的HDMI to DVI竟然无法直接连接到显示器,还需要一条对接线)。
配置好系统走了一遍,三字:不习惯,四字:很不习惯
但有一点值得称赞的是,这么走了下感觉到了苹果以用户优先的思想,如果我更早接触它,我想会喜欢它,可惜现在习惯吃大米了。
其他也不想动,软件动不动是money,伤不起,直接下了个xcode4.4.1准备开始尝尝IOS上的开发。还是那个helloword,跑起来了,可惜不知道怎么跑的,代码基本不懂,郁闷原来自己和object-c还没见过面呢。
赶紧到baidu上找了个object-c,两个小时下来也有点头晕了。
总体感觉是:别扭
Object-c作为C 的衍生,是有C的很多内容,又包含java思想,因此有C和java经验的人员会容易很多(自己正好有多年C经验,虽不精通但够用,开发过两个java软件,虽还不够用但对其语法、思想还是有所领悟)。
废话不说直接贴上学习笔记,如果笔记中有错误地方还请前辈们指点(以下可以说是基础中的基础了):
文件类型
.h 头文件
.m 源文件
注释(与C相同)
//
/**/
nil 同 NULL
BOOL型
只有YES/NO 其定义同java中的true/false 1为YES 非1为NO
包含头文件
#import <>
#import ""
类似C中的#include但比#include功能多点,因为还包含C中的#ifndef #define #endif 自动防止同一个文件被多次导入
打印(C中的printf)
NSLog(@"data= %i",data); //会自动加'\n'
NS表示库函数,Nent Step缩写,被称为是苹果开发人员的自恋表现
类定义(头文件中定义)
@interface MyClassName:ParentClassName //类名以大写字母开头 所有类继承于NSObject
{//类成员变量
int data1;//默认protected成员变量
@public int data2;//公有成员变量
@private int data3;//私有成员变量
}
@private int data4;
-(void) function; //不带输入参数的方法申明
-(void) function2:(int)in1;//带参数的方法
-(void) function3:(int)in1 function31:(int)in2 function32:(int)in3);//带多个参数,每个参数前有一个类似方法名的字符,可理解为一个参数对应一个方法
//'-'表示该方法是实例方法,对类的特定实例执行一些操作
//所有的方法都是@public ,所有类变量都是@private (类变量 != 类成员变量)
@end
类的实例化
@implementation MyClassName
-(void)function//方法实现
{
}
-(void)function2:(int)in1
{
data1=in1;
}
-(void)function3:(int)in1 function31:(int)in2 function32:(int)in3)
{
data1 = in1;
data2 = in2+in3;
}
@end
(从C和java的角度来看类的定义可认为是类的申明,类的实例化定义为类的定义,以下为类的实例化)
获取对象实例
MyClassName *myClass = [[MyClassName alloc] init]; //将alloc消息发送给MyClassName请求创建一个新实例,然后向新创建的实例对象发送init消息类初始化该对象
MyClassName *myClass = [MyClassName new]; //通常采用上一种方法
所有对象变量都是指针类型,Id类型已经被预定义为指针类型,不需要加'*'
方法返回以及输入参数如果没有指定类型均默认为Id类型
对象调用方法
[MyClass function2:1];
释放对象
[myClass release]; //类似C中的free
子类定义
@interface MyClassName2:MyClassName
-(void) function21:(int)in21;
-(int) function22;
@end
子类实例化
@implementation MyClassName2:MyClassName
- (void)function21:(int)in21
{
[self function1:in21] //self指名对象是当前方法的接收者
}
- (int) function22
{
return data1;
}
@end
预处理 和C一样
#define
##运算
把两个标记连在一起
数组、函数、指针、结构、联合的用法和C一样
循环、条件、条件运算、goto、空域据、逗号表达式、sizeof运算、命令行参数、位操作和C一样
静态变量 和C一样
枚举、typedef以及数据类型的转换和C一样
数据类型
int %o(%#o)八进制 %x(%#x)十六进制 %X 显示大写十六进制
float %f
char %c
double %Lg %Lf
unsigned int %u
id %p
字符串
NSPoint 几何图形点坐标
NSSize 几何图形长度和宽度
NSRect 矩形数据类型
NSString *str
字符串比较
-(BOOL) isEqualToString:(NSString *)aString;
-(NSComparisonesult)compare:(NSString *)string;//不区分大小写
不可变数组
NSArray *str = @"data1:data2:data3";
可变数组
NSMutableArray *array = [NSMutableArray arrayWithCapacity:17];