zoukankan      html  css  js  c++  java
  • 属性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;

    }

  • 相关阅读:
    在 kylin-v10环境中搭建 electron
    二叉树建树
    python 从txt文件中提取数据保存到 xlxs 文件中
    openpyxl 插件写入数据
    python时间格式转换
    vue-typescript-element-template使用总结
    vue3入门
    typescript入门
    记录下谷歌 浏览器请求数据时遇302,重新连接的问题
    uni使用render.js视图层与逻辑层传数据 的问题
  • 原文地址:https://www.cnblogs.com/DevinSMR/p/5118629.html
Copyright © 2011-2022 走看看