zoukankan      html  css  js  c++  java
  • IOS ——OC——属性的使用可以优化get和set方法

    @property的属性
    (属性帮我们封装了get和set方法!)
     
    使用属性注意事项:
    1.当属性名与成员变量名一样时,如果我们想保证成员变量有值,那么就需要在.m中加入@synthesize 变量名;
    2.当属性名与成员变量名一样时,如果我们对成员变量的值不强求,但我们又想打印所赋的值,这时在.m里可以使用(_属性名) 或者self.属性名
    3.当定义一个属性时,会首先查找是否有以 _属性名 命名的成员变量,如果有,则默认对其进行set和get,如果没有,则隐式生成以_属性名命名的成员变量;
    4.当我们使用属性时成员变量可以省略。
    (当.h文件中的成员变量名不省略时 .m文件中的@synthesize 也不能省略!当成员变量名省略时@synthesize也可以省略)
     
    可以使用属性来规定@property,设定的方式如下:
    @property (attribute1[,attrubute2,...])。

    举个例子:

    @property (nonatomic,strong) NSString* name;  
    @property (nonatomic,assign) int a;
     
    如果你在@property设置了属性,如果你使用@synthesize ,那么它会自动帮你完成这些属性的实现,如果你是自己手动的去完成实现的话,那么,你必须自己写出这些属性的实现。

    (1)、设置访问方法的名字

    默认的getter和setter器的名称是和变量名关联的,一定是setVirableName和virableName,比如上面的变量age,setter是setAge,getter是age。

    可以通过设置@property中的setter和getter属性来修改setter和getter器的方法名。

    getter=getterName

    setter=setterName

    举个例子:@property (getter=show1,setter=show2:)int age;//现在,它的getter和setter的方法名字就变了  

    注意:如果你设置了readonly属性的话,那么你就不应该设置setter属性,要不然会给出一个编译器的警告。

     (2)、设置只读或读写

    下面两个属性很好理解,

    readwrite:表示既有getter,也有setter

    readonly:表示只有getter,没有setter

    这两个属性是互相排斥的,只能存在一个。

     

    例:(使用set和get)
    类接口:
    #import <Foundation/Foundation.h>
    @interface AudiCar : NSObject
    {   NSString *color;
        float price;
        int seat;
    }
    -(void)setColor:(NSString *)newcolor;
    -(void)setPrice:(float)newprice;
    -(void)setSeat:(int)newseat;
    -(NSString*)color;
    -(float)price;
    -(int)seat;
    @end
    类实现:
    #import "AudiCar.h"
    @implementation AudiCar
    -(void)setColor:(NSString *)newcolor
    {
        color = newcolor;
    }
    -(void)setPrice:(float)newprice
    {
        price = newprice;
    }
    -(void)setSeat:(int)newseat
    {
        seat = newseat;
    }
    -(NSString*)color
    {
        return color;
    }
    -(float)price
    {
        return price;
    }
    -(int)seat
    {
        return seat;
    }
    @end
    主程序:
    #import <Foundation/Foundation.h>
    #import"AudiCar.h"
    int main(int argc, const char * argv[])
    {    @autoreleasepool
        {
            AudiCar *car = [[AudiCar alloc]init];
            [car setColor:@"yellow"];
            [car setPrice:45000.350000];
            [car setSeat:7];
            NSLog(@"颜色为:%@",  [car color]);
            NSLog(@"价格为:%.2f",[car price]);
            NSLog(@"座位为:%d",  [car seat]);
        }
        return 0;
    }
    运行结果:
    颜色为:yellow
    价格为:45000.35
    座位为:7
     
    用属性的例子:
    类接口:
    #import <Foundation/Foundation.h>
    @interface AudiCar : NSObject
    {
       
    }
    @property NSString *color;
    @property float price;
    @property int seat;
    -(void)introduction;
    @end
    类实现:
    #import "AudiCar.h"
    @implementation AudiCar
    -(void)introduction
    {
        NSLog(@"我这辆车是%@颜色,价值%.2f人民币,有%d个座位",_color,_price,_seat);
    }
    @end
    主程序:
    #import <Foundation/Foundation.h>
    #import"AudiCar.h"
    int main(int argc, const char * argv[])
    {    @autoreleasepool
        {
            AudiCar *car = [[AudiCar alloc]init];
            car.color = @"yellow";
            car.price = 45000.350000;
            car.seat = 7;
            [car introduction];
        }
        return 0;
    }
    运行结果:
    我这辆车是yellow颜色,价值45000.35人民币,有7个座位
    感谢您的访问! 若对您有帮助或有兴趣请关注博客:http://www.cnblogs.com/Rong-Shengcom/
  • 相关阅读:
    母函数做的题
    HDU2089 暴力打表
    HDU2036 改革春风吹满地
    HDU1201 水题
    高可用服务 AHAS 在消息队列 MQ 削峰填谷场景下的应用
    Nacos Committers 团队首亮相,发布 0.9.0 版本
    Dubbo Mesh 在闲鱼生产环境中的落地实践
    Watchdogs利用Redis实施大规模挖矿,常见数据库蠕虫如何破?
    阿里在使用一种更灵活的软件集成发布模式
    2019 年,容器技术生态会发生些什么?
  • 原文地址:https://www.cnblogs.com/Rong-Shengcom/p/4935801.html
Copyright © 2011-2022 走看看