黑马程序员 OC基础: 常用语法

来源:互联网 发布:android如何调用js方法 编辑:程序博客网 时间:2024/05/17 01:05

——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”]; // 向调用的方法传递字符串对象

核心语法部分目前看到的基本就这些

0 0
原创粉丝点击