04. 属性

1. 属性(Property)

    OC中,属性指提供了getter和(或)setter方法的数据。

    @property int numerator;    //setNumerator numerator

    @property int denominator;    //setDenominator denominator

    本质上,属性是方法(不是变量),属性的值是由实例变量来保存。


    1.1 属性的本质

        属性一般由三个部分组成:

            1)保存属性值的实例变量

                    {

                            实例变量类型 实例变量名

                    }

            2)getter和setter方法的声明

                    getter方法的方法名和属性名一样,没有参数,返回值类型和属性类型一样。

                        -(属性的类型)属性名;

                    setter方法的方法名是"set" +属性名并首字母大写+":"+和属性类型一样的参数。

            3)getter和setter方法的实现

                    setter方法的实现主要是用来给属性赋值的。

                    getter方法的实现主要是用来读取属性的值。

            引用.属性 = 值;    ==>会自动调用setter方法

            变量 = 引用.属性;    ==>会自动调用getter方法

    1.2 声明式的属性

        1)定义实例变量

        2)在interface部分声明属性:

                @property 属性类型 属性名;

        3)在implementation部分生成具体的方法:

                @synthesize 属性名 = 实例变量名;

                会自动生成对应的setter和getter方法。

    1.3 从iOS5开始,声明式的属性简化如下:

            可以不定义实例变量,编译器会生成"_属性名"的实例变量,但在implementation部分,还必须生成具体的方法:

            @synthesize 属性名 = _属性名;

    1.4 从iOS6开始,声明式属性又简化:

            只需要用@property声明属性即可,实例变量和getter,setter方法的具体实现会自动生成,不需要程序员干涉。

            如果你不满意编译器生成的部分,可以自己写。


//
//  Point2_1.h
//  day02-4
//  属性的第1个版本
//  Created by tarena on 14-3-18.
//  Copyright (c) 2014年 tarena. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface Point2_1 : NSObject
{
    int x;
    int y;
}
-(void)setX:(int)newX;
-(int)getX;
-(void)setY:(int)newY;
-(int)getY;

@end

//
//  Point2_1.m
//  day02-4
//
//  Created by tarena on 14-3-18.
//  Copyright (c) 2014年 tarena. All rights reserved.
//

#import "Point2_1.h"

@implementation Point2_1

-(void)setX:(int)newX{
    x = newX;
}

-(int)getX{
    return x;
}

-(void)setY:(int)newY{
    y = newY;
}

-(int)getY{
    return y;
}

@end


//
//  Point2_2.h
//  day02-4
//  属性的第2个版本
//  Created by tarena on 14-3-18.
//  Copyright (c) 2014年 tarena. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface Point2_2 : NSObject
{
    int _x;
    int _y;
}
-(void)setX:(int)x;
-(int)getX;
-(void)setY:(int)y;
-(int)getY;
@end


//
//  Point2_2.m
//  day02-4
//
//  Created by tarena on 14-3-18.
//  Copyright (c) 2014年 tarena. All rights reserved.
//

#import "Point2_2.h"

@implementation Point2_2

-(void)setX:(int)x{
    _x = x;
}

-(int)getX{
    return _x;
}

-(void)setY:(int)y{
    _y = y;
}

-(int)getY{
    return _y;
}

@end


//
//  Point2_3.h
//  day02-4
//  属性的第3个版本
//  Created by tarena on 14-3-18.
//  Copyright (c) 2014年 tarena. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface Point2_3 : NSObject
@property int x;
@property int y;
@end


//
//  Point2_3.m
//  day02-4
//
//  Created by tarena on 14-3-18.
//  Copyright (c) 2014年 tarena. All rights reserved.
//

#import "Point2_3.h"

@implementation Point2_3
@synthesize x = _x;
@synthesize y = _y;
@end


//
//  Point2_4.h
//  day02-4
//  属性的第4个版本
//  Created by tarena on 14-3-18.
//  Copyright (c) 2014年 tarena. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface Point2_4 : NSObject
@property int x;
@property int y;
@end


//
//  Point2_4.m
//  day02-4
//
//  Created by tarena on 14-3-18.
//  Copyright (c) 2014年 tarena. All rights reserved.
//

#import "Point2_4.h"

@implementation Point2_4

@end



//
//  main.m
//  day02-4
//
//  Created by tarena on 14-3-18.
//  Copyright (c) 2014年 tarena. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Point2_1.h"
#import "Point2_2.h"
#import "Point2_3.h"
#import "Point2_4.h"

int main(int argc, const char * argv[])
{

    @autoreleasepool {
        
        Point2_1* p1 = [Point2_1 alloc];
        [p1 setX:10];
        [p1 setY:20];
        NSLog(@"p1:(%d,%d)", [p1 getX], [p1 getY]);
        
        Point2_2* p2 = [Point2_2 alloc];
        [p2 setX:11];
        [p2 setY:21];
        NSLog(@"p2:(%d,%d)", [p2 getX], [p2 getY]);
        
        Point2_3* p3 = [Point2_3 alloc];
        p3.x = 31;
        p3.y = 23;
        NSLog(@"p3:(%d,%d)", p3.x, p3.y);
        
        Point2_4* p4 = [Point2_4 alloc];
        p4.x = 41;
        p4.y = 14;
        NSLog(@"p4:(%d,%d)", p4.x, p4.y);
        
    }
    return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值