黑马程序员一成员变量,@property 与 @synthesize,id,构造方法

来源:互联网 发布:php文件上传下载系统 编辑:程序博客网 时间:2024/05/22 16:51

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

一.成员变量的作用域:


1.@public:在任何地方都能直接访问对象的成员变量

2.@private:只能在当前类的对象方法中直接访问,其他通过getset方法调用

3.@protected:能再当前类和子类的对象方法中直接访问,其他通过getset方法调用(默认)

4.@package:(不常用)如果两个类处在同一个框架可以通过变量名直接访问成员变量

5.实现里面也可以写成员变量(默认私有),就算写@public也没有用(不能和@interface文件中定义的成员变量名相同)


二.@property 与 @synthesize

@property可以自动生成某个成员变量的setget方法的声明


@synthesize age = _age;可以自动生成property中声明变量的setget的方法实现

会访问_speed成员变量,如果没有会自动生成@property类型的_speed变量

如果@property中有age-age两个变量

@synthesize age 会默认访问age成员变量 会访问跟名字一样的成员变量

如果没有age就会自动生成@property类型的age变量


如果没有@synthesize@property可以生成gettersetter的声明和实现

如果有就用自己的代码


如果同时声明和实现了settergetter就不会再生成_age.生成_age就是为了生成gettersetter的声明和实现


三.id 

id 不能命名为标示符

万能指针,能指向\操作任何OC对象.参数写成id类型,任何对象都能传进来.

oc对象本身是结构体

typedef struct objc object{    Class isa;}*id;

四.构造方法

构造方法:就是进行初始化的

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

1.分配存储空间   +alloc

Person *p1 = [Person alloc];

2.初始化   -init

Person *p2 = [p1 init];


Person *3 = [[Person alloc] init];

init方法为构造方法用来初始化对象的方法,是个对象方法,-开头

重写构造方法的目的:为了让对象创建出来,成员变量就会有一些固定值


重写构造方法的注意点

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

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

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


融合为


- (id)init{    if ( self = [ super init] )    {//_age初始化为10        _age = 10;    }    // 返回一个已经初始化完毕的对象    return self;}


自定义构造方法

自定义构造方法的规范

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

2.返回值一般是id类型

3.方法名一般以init开头


- (id)initWhithName:(NSString *)name andAge:(int)age{    if( self = [super init])    {        _name = name;        _age = age;    }    return self;}


若成员变量是父类中直接生成的属性为@private


- (id)ininWithName:(NSString *)name andAge:(int)age andNo:(int)no{    if ( self = [super init])    {        _no = no;        self.name = name;        self.age = age;                //[self setName:name];        //[self setAge:age];        }    return self;}



简化:开发中常用写法:自己调用自己的东西

- (id)initWhithName:(NSString *)name andAge:(int)age andNo:(int)no{    //将name和age在父类的方法中初始化    if(self = [super initWhithName:name andNo:no])    {        _no = no;    }    return self;}





------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
0 0