OC中点语法、id类型和构造方法

——<a href="" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! ——-

点语法:

OC中点语法的本质是方法调用,而不是直接访问成员变量

例如:p.age = 10; //等价于[p setAge:10];int a = p.age; //等价于[p age];当使用点语法的时候,编译器就会展开成相应的方法

p.age = 10; 就会展开成 [p setAge:10 ];

int a = p.age; 就会展开成 [p age ];

使用注意:

#import "Person.h"@implementation Person- (void)setAge:(int)age{_age = age;NSLog(@"setAge");//会引发死循环//self.age = age;}- (int)age{NSLog(@"age");//会引发死循环//return self.age;}@endid:

万能指针(内部已经包含*),能指向任何OC对象,只能使用于OC对象 id == NSObject *id类型的定义:

typedef struct objc_object{class isa;} *id;id 在使用的时候,后面一定不要在加*

局限性:调用一个不存在的方法,编译器会马上报错

#import <Foundation/Foundation.h>#import "Person.h"int main(){Person *p = [Person new];//万能指针,能指向\操作任何oc对象id d = [Person new]; //id == NSObject *//多态NSObject *o = [Person new];[d setAge:10];NSLog(@"%d",[p age]);return 0;}构造方法:用来初始化对象的方法(-init),是个对象方法,以 – 号开头

Person *p = [Person new];

new方法用来创建对象,实际上new方法包含两部分

完整地创建一个可用的对象:

1.分配存储空间 +alloc

2.初始化 -init当我们在初始化对象的时候,,想拥有一些固定的值,那么就需要重写构造方法(init)方法重写构造方法的目的:为了让对象创建出来,成员变量就会有一些固定的值重写构造方法的注意点:

1.先调用父类的构造方法([super init])

2.再进行子类内部成员变量的初始化

//重写 -init方法//- (id)init//{// //1.一定要调用super的init方法:初始化父类中声明的一些成员变量和其他属性// self = [super init]; //返回当前对象 self//// //2.如果对象初始化成功,才有必要进行接下来的初始化// if (self != nil)// {////初始化成功//_age = 10;// }// //3.返回一个已经初始化完毕的对象// return self;//}//以后重写构造方法就这样写:- (id)init{if (self = [super init]){//初始化成功_age = 10;}//返回一个已经初始化完毕的对象return self;}init方法的执行过程分析:

自定义构造方法:

自定义构造方法的规范:

1.一定是对象方法,一定以 - 开头

2.返回值一般是id类型

3.方法名一般以initWithXXX开头

– (id)initWithAge:(int)age;

Person.h

#import <Foundation/Foundation.h>@interface Person : NSObject@property NSString *name;@property int age;/* 自定义构造方法的规范: 1.一定是对象方法,一定以减号开头 2.返回值一般是id类型 3.方法名一般是init开头 */- (id)initWithName:(NSString *)name;- (id)initWithAge:(int)age;- (id)initWithName:(NSString *)name andAge:(int)age;@end

Person.m

<pre name="code" class="objc">#import "Person.h"@implementation Person- (id)initWithName:(NSString *)name{if (self = [super init]){_name = name;}return self;}- (id)initWithAge:(int)age{if (self = [super init]){_age = age;}return self;}- (id)initWithName:(NSString *)name andAge:(int)age{if (self = [super init]){_name = name;_age = age;}return self;}@end

main.m

</pre><pre name="code" class="objc">#import <Foundation/Foundation.h>#import "Person.h"int main(){Person *p = [[Person alloc]initWithName:@"Rose"];Person *p2 = [[Person alloc]initWithName:@"Jim" andAge:10];return 0;}

——<a href="" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! ——-

未经一番寒彻骨,焉得梅花扑鼻香

OC中点语法、id类型和构造方法

相关文章:

你感兴趣的文章:

标签云: