OC学习笔记5

来源:互联网 发布:创新创业网络课答案 编辑:程序博客网 时间:2024/05/16 11:18

OC学习笔记5

A. 变量的可见性

类型:

@private:只能在当前类的对象方法中直接访问

@protected:可以在当前类以及子类的对象方法中直接访问

@public:任何一个地方都可以访问

@package:同一个“体系内”(框架)可以访问,介于@private@public之间

B. @property

a.用在@interface

b.用来自动生成settergetter的声明

C.@property int age;就可以代替下面的两行

- (int)age;   // getter

- (void)setAge:(int)age;  // setter

@property示例

 

 

C.@synthesize

a.用在@implementation

b.用来自动生成settergetter的实现

c.@synthesize age = _age;就可以代替

- (int)age{

return _age;

}

- (void)setAge:(int)age{

_age = age;

}

@synthesize示例

 

 

D. @synthesize的细节

@synthesize age=_age;

a.  Settergetter实现中会访问成员变量_age;

b. 如果成员变量_age不存在,就会自动生成一个@private的成员变量

C. @synthesize age;

Settergetter实现中会访问成员变量age;

如果成员变量age不存在,就会自动生成一个@private的成员变量age

 手动实现

若手动实现了setter方法,编译器就只会自动生成getter方法

若手动实现了getter方法,编译器就只会自动生成setter方法

若同时手动实现了settergetter方法,编译器就不会自动生成不存在的成员变量

@property新特性

新版本的Xcode@property独揽了@synthesize的功能,@property可以同时生成settergetter的声明和实现

默认情况下,settergetter方法中的实现,会访问下划线_开头的成员变量

 

万能指针 id简介

万能指针,指向任何OC对象,相当于NSObject *

 

Id类型定义

typedef struct objc_object {

    Class isa;

} *id;

使用

//注意id后面不要加上*

Id p=[Person new];

局限性

掉用一个不存在的方法,编译器会马上报错

 

对象创建原理

New的拆分两部曲

A.分配内存(+alloc

B.初始化(-init

C.示例

Person *p1 = [Person alloc];

D.Person *p1 = [p1 init];

E.合成一句后:

F.Person *p = [[Person alloc] init];

Init方法的重写过程

- (id)init

{

    if (self = [super init])

    {

        _age = 10;

    }

    return self;

}

自定义构造方法

构造方法的一些规范

A.返回值是id类型

B.方法名都以init开头

- (id)initWithAge:(int)age {

    if (self = [super init]) {

        _age = age;

    }

    return self;

}

 

 

 

0 0