——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——
点语法的使用
object c 中的语法糖
平时觉得调用 set get 方法太麻烦,不如试试点语法.
person.age = 10;
// [person setAge:10];
int a = person.age;
// [person age];
set & get 方法的简化写法
@property age; 声明
@synthesize age = _age; 方法
用了上述的方法, 在 xcode 中会帮我们自动生成, set get 方法的声明和实现.
在新版本中的 xcode 中更方便(4.2以上)
都不需要@ synthesize 去实现方法
只需要一个@ property 就可以生成 set get 方法的声明和实现
@interface Dog : NSObject
@property int age;
@end
1.生成 set get 方法声明
2.生成 _age 成员变量
3.生成 set get 方法实现
生成的变量作用域默认为 @private
如果我想定义为其它作用域,还是得自己手写 ste 和 get 方法.
在已经声明了 set get 方法的情况下, xcode 不会再次重复自动生成
如果同时实现了 setter getter 方法,编译器就不会自动生成不存在的成员变量
id 关键字
万能指针,能操作任何 oc 对象
写法 :
id d = [Person new];
构造方法
用来初始化对象的方法,是个对象方法.
Person *p = [ Person new];
Person *p = [ [Person alloc] init]; // 真正的初始化对象过程
init 是构造方法
new 方法返回的成员变量都是初始化后的0
所以我们需要对成员变量初始化一定的值时
可以重写对象的 init 方法来满足自己的需要
重写构造方法所要满足的条件:
1.一定要调用回 super 的 init 方法:初始化父类中声明的成员变量和属性
2.如果初始化对象成功,初始化成员变量
3.返回初始化完毕的对象
重写方法如下 :
(id) init
{
self = [super init];
if(self != nil)
{
_age = 10;
}
return self;
}
再次初始化 Person, _age 的初始化值为10不再为0
自定义构造方法
规范:
1.一定是对象方法,-减号开头
2.一般返回值为 id 类型
3.方法名一般 init 开头
(id)initWithName:(NSString *)name
{
self = [super init];
if(self != nil)
{
_name = name;
}
return self;
}
Person *P = [[Person alloc] initWithName:@“Rose”];
这样还可以传递参数进行初始化
Category 分类/类别
可以给某一个类扩充一些方法 (不修改原来类的代码情况下)
//声明
@interface Person (XB) /*类名+(分类名称)*/
@end
//实现
@implementation Person
@end
如此便于模块分工,合作编写程序
分类的作用: 在不改变原来类内容的基础上,可以为类增加一些方法
使用注意:
1.分类只能增加方法,不能增加成员变量
2.分类方法实现中可以访问原来类中声明的成员变量
3.分类中可以重新实现原来类中的方法,但是会覆盖掉原来的方法,会导致原来的方法没法再使用
+load 和 + initialize 方法
+load 当程序启动时,就会加载所有类和分类,并调用所有类和分类的 +load 方法
先加载父类,再加载子类; 也就是先调用父类的+load, 再调用子类的+ load
先加载原始类,在加载分类
不管程序运行过程中有没有用到这个类,都会调用+ load 加载
+initialize 在第一次使用某个类(比如创建对象等),就会调用依次+ initialize 方法
一个类只会调用一次+ initialize 方法,先调用父类的,再调用子类的
有需要时可以重写这两个函数,在我们 加载/首次调用 类时做一些我们想做的事情.
description 方法
Person *p = [[Person alloc] init];
p.age = 20;
p.name = @“Jake”;
NSLog(@“%@”,p);
// 默认情况下,利用 NSlog 和%@输出对象时,结果是:<类名: 内存地址>
于是我们可以重写类的 description 方法,来实现打印对象中所有元素的功能
- (NSString *)description
{
return [NSString stringWithFormat:@“age = %d, name = %@“, _age, _name];
}
使用 NSLog 和%@输出某个对象时,会调用对象的- description 方法,输出返回值.
若使输出某个类对象时,会调用对象的+ description 方法,输出返回值.
SEL
每个方法都有与之对应的 sel 类型对象
根据一个 sel 对象就可以找到方法的地址,进而调用方法
这一点我觉得挺像是对 函数指针 的一种封装
sel 对象的创建
SEL s = @selector(test); // 把方法名转换为 sel 对象
SEL s2 = NSSelectorFromString(@“test”); // 把字符串转换为 sel 对象
sel 对象的调用
[p performSelector:s]; // 调用 sel 对象所指的方法
[p performSelector:s withObject:@“123”]; // 向调用的方法传递字符串对象
核心语法部分目前看到的基本就这些