• 属性property(二十二)


    在属性之前,在定义实例变量时,每一个实例变量都需要配对一对getter、setter方法,这一对对的getter和setter方法,都需要我们一个个去声明和实现。由于写getter和setter方法是一项大量重复的工作,oc在2.0版本就给我们提供了解决这个问题的办法,就是加入@property。property的出现,就是为了简化代码和提高读写数据的安全性。

    用@property来标识属性,标识后的变量,会自动生成与其变量名对应的getter和setter方法。我们在main方法中可以直接调用其getter和setter方法。

    如定义了一个name变量,用@property来标识后,oc会自动生成一套getter,setter方法:getter方法:name,setter方法:setName:(包括冒号:)。则在main方法中,就可以直接调用name方法和setName:方法。

    一般在类的.h文件中声明@property,系统自动生成getter,setter方法,此时如果我们不喜欢生成的getter、setter方法名,可以在.m实现文件中,在@implementation和@end之间,用@synthesize关键字,把我们想要的名字,赋值给我们的自动生成的getter、setter方法名。并且在以后调用,都要用我们起得方法名,不能再用getter、setter方法名。

    一般情况下,我们不要去修改自动生成的getter、setter方法名。

    @property 负责生成getter、setter方法名

    @synthesize 负责实现getter、setter实现。

    Person.h

    #import <Foundation/Foundation.h>

    @interface Person : NSObject{

        NSString *name;

    }

        //具体数学(推荐的书)

        //编程之美(推荐的书)

    //自动生成一个带下划线 _ 的,并且以属性名命名的实例变量 属性名:name,自动生成 _name

    //同时在.m文件中还生成了@synthesize 属性名 = 实例变量名

    //@property生成了getter和setter方法的声明

    //由@synthesize负责实现 getter、setter方法

    @property NSString *name;

     

    @end

    Person.m

    #import "Person.h"

    @implementation Person

    //一般不会修改自动生成的实例变量名

    @synthesize name = _age;//若是这样改,则实例变量的名为:_age

    //@synthesize name = _name;

     

    - (void)test{

        _age = @"12233";

    }

    @end

    main.m

    #import <Foundation/Foundation.h>

    #import "Person.h"

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

        @autoreleasepool {

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

            [p1 setName:@"北京"];

            [p1 name];

            NSLog(@"%@",[p1 name]);//2015-04-22 10:29:19.463 OCLesson8_属性[878:36298] 北京

          

        }

        return 0;

    }

  • 相关阅读:
    运算符和结合性
    几种排序算法 C++
    UNIX环境高级编程笔记
    几个C语言题与答案
    视频流中的DTS/PTS到底是什么 转载
    linux硬链接与软链接 转载
    HTTP POST上传文件(wininet实现)
    并查集(求最小生成树和集团问题)
    c++ vector
    C++STL priority_queue类
  • 原文地址:https://www.cnblogs.com/DevinSMR/p/5118629.html
Copyright © 2020-2023  润新知