创建: 2018/01/17
完成: 2018/01/19
对象(object)与信息 |
信息式 |
声明实例变量 |
| 向对象变量发送信息 |
[obj msg] //这就是信息式
例: [[obj msg1] msg2];
|
把信息式返回的结果
作为数组等的索引来用
|
element = table[[obj count]];
| 信息(message) |
和变量一样的命名规则, 由信息关键字组成 |
[aString copy];
width = [node width]; //变量名和信息名可以重复,自动区分
[[doc filename] retain];
|
可以带参数
|
信息后面带:
[printInfo setLeftMargin: 60.0];
[[[cw window] firstResponder] copy: sender];
[doc isSameDirecory:[info objectAtIndex: ++num]];
带有多个信息,空格分开,可以省略信息关键词p19
// TODO: 省略信息关键词后默认关键词是啥
cell = [albumview cellAtRow:i column:j];
[manager fileExistsAtPath:dirname isDirectory:&isdir];
[view lineTo: 1.4142 :(y + 1.0)];
|
信息选择器
(message selector)
|
没有值 |
| 有值 |
| 多个值 |
left:right:
lineTo:://第二个量开始可以省略关键词
| | | 注意: 信息选择器有顺序,顺序不同的不看做同一个 | | | | | | | | | | | |
| | | | | | | | | | | | | | |
| | | | | | | | | | | | |
|
实例的生成与初始化
|
ObjC里通过向类发送信息的方式来生成
//生成 alloc
[类名 alloc] //只确保了内存空间,需要初始化
//初始化 init 以init开头的
[[类名 alloc] init]
|
| |
| |
| |
| |
| |
| |
| |
| |
类的定义 |
类的interface部分 |
位置 | 一般记在头文件里 | 例 |
・类名不能和变量或方法的声明重名
・变量和方法可以重名
@interface 类名 : 母类名
{
实例变量的声明;
...
}
方法的声明;
...
@end //注意: @end后面不需要;
@开头的是编译修饰符,区别于C语言的#开头
| 方法的声明 |
・可以省略类型声明,默认为id。C语言下默认为int。但是不要省略
(id)delegate; //不带参数
(id)cellAtRow:(int)row column:(int)col; //带两个参数
(void)setAutodisplay:(BOOL)flag;// BOOL YES(非零) NO(零)
| | | | | | | | | | | | | | |
|
类的实现部分 |
例 |
・不用写母类
・interface里声明的方法必须有对应实现
@implementation 类名
方法的定义
...
@end
| 方法的实现例 |
・方法的参数名里的变量和方法内的局部变量不要和类的实例变量重名
・方法内部可以自由获取该类的实例变量
・self 表示拥有当前方法的实例对象,可以用self来实现递归
(double)evalution:(int)val {
double temp = [order proposedBalance: value];
if (currentValue > (int)temp) {
temp = [order proposedBalance: val*1.25]
}
return temp;
}
| | | | | | | | | | | | | | | | |
|
| |
| |
| |
| |
| |
| |
| |
| |
编译 |
| 类似C语言 |
| |
| |
| |
| |
| |
| |
| |
| |
| |
程序的写法 |
ObjC混合语言 |
ObjC是混合语言 | 支持多种编程风格:面向对象,面向过程 | 何时用C |
●使用现成的函数模块(module)
●Unix的系统接口
●不与具体类相关的计算模块
●在类定义里作为其他方法的一部分子函数
| | |
|
c语言的使用方法 |
随便哪里都能放
不在类定义里的不能用self(?) # TODO: check [到底啥意思]
|
静态变量 |
对象部分(面向对象部分)不要用static固定变量
原因: 静态变量被多个对象参照,值被各种不经意修改
|
接入头文件 |
ObjC |
| C |
| 区别 |
两者一样,但是#import只会被包含一次
#import "a.h" // 只会被包含一层
// 相当于
#ifndef _A_H_
#define _A_H_
// 头文件代码写在这里
#endif
| | | | |
|
| |
| |
| |
| |
| |
| |
转载于:https://www.cnblogs.com/lancgg/p/8299398.html