博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS开发-OC语言 (六)点语法和@property
阅读量:5275 次
发布时间:2019-06-14

本文共 2415 字,大约阅读时间需要 8 分钟。

点语法和@property

 

知识点

 

1.setter/getter函数

2.点语法

3.@property语法和属性

 

 

========================================

一、setter和getter函数 

  1.setter和getter函数的作用

setter  方法:   修改对象的字段/实例变量

getter 方法:   读取对象的字段/实例变量

 

setter 方法: 可以带有多个参数,可以同时给多个变量赋值

 

getter方法: 不带参数,只能返回一个变量的值。

 

 

 

2.setter和getter如何命名

  setter 方法的命名:

xxx: 表示的是成员变量的名字

 

//带有一个参数

- (void)setXxx:(参数类型)参数1;

//带有多个参数

- (void)setXxx:(参数类型)变量名字  xxx:(参数类型)变量名字 ……;

 

 

getter 方法的命名:

- (返回值类型)xxx;

 

 

=======================================

二、点语法   为了让程序设计简单化

隐藏了内存管理细节

隐藏了多线程、同步、加锁

 

 

2.点语法的作用

属性可以在不适用 【对象 方法名字】 的情况下使用点语法

无需调用[foo value] 可以调用foo.value 来访问. 注意跟结构体的区别

虽然foo.value 看起来像是直接访问value变量,但是属性始终调用

方法,而这些方法又可以访问对象的数据。

 

 

3.点语法的调用

     //一个参数的set方法可以使用点语法赋值

    [xiaoxin setName:@“小新”];

    //这不是使用成员变量,是使用set方法

    xiaoxin.name = @"小新";

    //可以通过.语法调用get方法

    NSString * ret = [xiaoxin name];

    //xiaoxin.name在等号左边就是set方法,使用这个表达式的值,就是get方法

    ret = xiaoxin.name;

    

【注】点语法只是访问setter getter方法,不是使用成员变量。

 

4.点语法和setter/getter函数的关系

 

 

【点语法和[]写法】本质一样,同样是发送set和get消息,只不过写法不同。

         

  dog.name = @“xiaobai”;

展开成: [dog setName: @“xiaobai”];

 

 

      NSString *nameString = dog.name;

展开成: NSString *nameString = [dog  name];

          

=======================================

三、属性(@property)和合成(@synthesize)

 

1.当一个类中的成员变量非常多的时候,setter和getter是否会显得非常臃肿,@property和@synthesize可以使代码变得简洁。

 

2.@property用处

  1) 让编译器自动声明setter和getter

  

3.@property使用

  1)  @property 成员变量类型  变量名;

 

 

4.@synthesize用处

  1)让编译器自动实现setter和getter函数 

 

 

5.@synthesize可以省略(Xcode4.6以后可以省略)

   //声明一个属性,相当于声明了下面两个方法

   @property NSString * name;

   //- (void)setName:(NSString *)name;

   //- (NSString *)name;

 

    @synthesize name = _name;

    //Xcode4.6以前,需要这样实现,如同实现了下面两个方法

    //Xcode4.6起,无需写@synthesize,自动实现下面两个方法,会自动关联名位_XXX的变量

    //如果类中并没有对应的变量,会自动生成相应的变量。

 

 ======================================

@property属性

 

1.原子操作

  atomic(缺省)/nonatomic

 

 

 

2. assign  直接赋值修饰符(缺省),一般用在基本类型。

           

        //缺省(默认)修饰符

        @property (assign) NSString * name;

         //同时生成set、get方法

 

      直接赋值,展开的set方法:

     - (void)setName:(NSString *)name

     {

        _name = name;

     }

 

3.读写操作

  readonly/readwrite(缺省)

//只读修饰符

   //只生成getter,没有setter

    @property (readonly) NSUInteger age;

    

 

    /缺省修饰符

    //同时生成set、get方法

    @property (readwrite) NSString *name;

   

 

 

 

4. 给set方法和get方法起别名

//getter修饰符

   //给get方法起别名

    @property (getter = myWeight) NSUInteger weight;

 

 

   //setter修饰符

   //给set方法起别名

   @property (setter = setLife:) BOOL alive;

 

   //一个属性可以添加多个修饰符,多个修饰符间用逗号隔开。

   @property (setter = setUsername:, getter = getUsername) NSString *name;

 

  

 

 

5. 多个属性修饰符,需要用逗号隔开

@property (nonatomic, readonly,getter = birth) 

NSString * birthday;

 

转载于:https://www.cnblogs.com/fcug/p/6279685.html

你可能感兴趣的文章
Android笔记 Handler
查看>>
如何阅读大型前端开源项目的源码(转)
查看>>
java.util.Arrays类详解
查看>>
NYOJ-626-intersection set(二分查找)
查看>>
项目管理之路(1):初步踏入项目管理
查看>>
Java 中 静态方法与非静态方法的区别
查看>>
echarts饼图显示百分比
查看>>
JMS消息
查看>>
Jenkins+ProGet+Windows Batch搭建全自动的内部包(NuGet)打包和推送及管理平台
查看>>
php上传文件及头像预览
查看>>
大四java实习生的一些经历
查看>>
线程池的概念
查看>>
Oracle_Statspack性能诊断工具
查看>>
Java 序列化
查看>>
Java 时间处理实例
查看>>
Java 多线程编程
查看>>
Java 数组实例
查看>>
mysql启动过程
查看>>
2017前端面试题总结
查看>>
Http GetPost网络请求
查看>>