一、setter和getter函数
    1.回忆:如何访问对象中的成员变量
    2.setter和getter函数的作用
            setter  方法:   修改对象的字段/实例变量
            getter 方法:   读取对象的字段/实例变量
            
            setter 方法: 可以带有多个参数,可以同时给多个变量赋值

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

3.setter和getter如何命名
                
    setter 方法的命名:

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

//带有一个参数
            - (void)setXxxx:(参数类型)参数1;
            //带有多个参数
            - (void)setXxxx:(参数类型)xxxx andXxxx:(参数类型)xxxx......;

getter 方法的命名:
            - (返回值类型)xxxx;

=======================================
二、点语法
    1.为什么要设计点语法
        为了方便别的程序员转到OC上面来,   C ++, jave ,c#  都是使用的点语法        为了让程序设计简单化
        隐藏了内存管理细节
        隐藏了多线程、同步、枷锁细节

2.点语法的作用
        属性可以在不适用括号的情况下使用点语法
        无需调用[foo value] 可以调用foo.value 来访问. 注意跟结构体的区别
        虽然foo.value 看起来像是直接访问value变量,但是属性始终调用
        方法,而这些方法又可以访问对象的数据。

3.点语法的调用
        xiaohong.name = @“xiaohong”;这里实际上调用的是setter方法。
        NSString *nameString = xiaohong.name; 这里实际上调用的是getter方法。

4.点语法和setter/getter函数的关系
        @interface QFDog: NSObject
        {
            NSInteger _age;
        }
        - (void)setAge:(NSInteger)newAge;
        - (NSInteger)age;
        @end

@implementation QFDog
        - (void)setAge:(NSInteger)newAge
        {
                _age = newAge;
        }
        - (NSInteger)age
        {
                return _age;
        }
        @end

int main(void)
        {
                QFDog *dog = [[QFDog alloc] init];
                [dog setAge:10];
                NSInteger dogAge  = [dog age];

dog.age = 20;
                NSInteger dogAge1 = dog.age;

return 0;
        }

【注】
         【点语法和[]写法】
            本质一样,同样是发送set和get消息,只不过写法不同。
         
         点语法:
            对象指针.实例变量;
         
            如果是赋值
                    对象指针.实例变量 = xxxx;
            展开成: [对象指针 setXxxx: xxxx];
         
            
            如果是取值:
                    xxxx = 对象指针.实例变量;
            展开成: [对象指针 实例变量];

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

NSString *nameString = dog.name;
    展开成: NSString *nameString = [dog  name];
         
         能够使用点语法的条件:
            1、必须实现set和get方法
            2、只能用于实例化的变量的赋值和取值
            3、能使用点语法的赋值,对应的set方法只能够带有一个参数

#import <Foundation/Foundation.h>

@interface Person : NSObject
{
NSString *_name;
NSInteger _age;
NSString *_identical;
}
- (void)setName:(NSString *)name;
- (NSString *)name; - (void)setAge:(NSInteger)age;
- (NSInteger)age; - (void)setIdentical:(NSString *)identical;
- (NSString *)identical;
@end #import "Person.h" @implementation Person
- (void)setName:(NSString *)name
{
_name = name;
}
- (NSString *)name
{
return _name;
}
- (void)setAge:(NSInteger)age
{
_age = age;
}
- (NSInteger)age
{
return _age;
} - (void)setIdentical:(NSString *)identical
{
_identical = identical;
}
- (NSString *)identical
{
return _identical;
}
@end #import <Foundation/Foundation.h>
#import "Person.h" int main(int argc, const char * argv[])
{ @autoreleasepool { Person *p = [[Person alloc] init];
p.name = @"李平";
//[p setName:(NSString *)]
NSString *nameStirng = p.name;
//NSString *nameStirng = [p name];
NSLog(@"name: %@", nameStirng); p.age = 10;
p.identical = @"12345678"; NSLog(@"age: %ld", p.age);
NSLog(@"identical: %@", p.identical); }
return 0;
}

property

#import <Foundation/Foundation.h>

@interface MyPoint : NSObject
{
NSInteger _x;
NSInteger _y;
NSInteger _z;
NSString *_name;
}
@property NSInteger x, y, z;
// NSInteger _x;
// NSInteger _y;
// NSInteger _z; //展开成为下面的两行
//- (void)setX:(NSInteger)x;
//- (NSInteger)x; //@property NSInteger y;
//- (void)setY:(NSInteger)y;
//- (NSInteger)y; //@property NSInteger z;
//- (void)setZ:(NSInteger)z;
//- (NSInteger)z; @property NSString *name;
//- (void)setName:(NSString *)name;
//- (NSString *)name; - (void)test; @end #import "MyPoint.h" @implementation MyPoint
//@synthesize x; //首先会去实例变量列表查找x, 如果没有x, 生成x
@synthesize x = _x; //和成员列表的_x 进行关联
@synthesize y = _y; - (void)test
{
// NSLog(@"x = %ld", x);
NSLog(@"_x = %ld", _x);
NSLog(@"_y = %ld", _y); } //- (void)setX:(NSInteger)x
//{
// _x = x;
//}
//
//
//- (NSInteger)x
//{
// return _x;
//} //如果自己实现了set和get方法,那么@synthesize就不会展开
//- (void)setY:(NSInteger)y
//{
// NSLog(@"------------");
// _y = y;
//}
//- (NSInteger)y
//{
// return _y;
//}
//
//
//
//- (void)setZ:(NSInteger)z
//{
// _z = z;
//}
//- (NSInteger)z
//{
// return _z;
//}
//
//- (void)setName:(NSString *)name
//{
// _name = name;
//}
//- (NSString *)name
//{
// return _name;
//}
@end #import <Foundation/Foundation.h>
#import "MyPoint.h"
int main(int argc, const char * argv[])
{ @autoreleasepool { MyPoint *point = [[MyPoint alloc] init]; point.x = 10;
point.y = 100; [point test];
NSLog(@"x : %ld, y: %ld", point.x, point.y); } return 0;
}

OC第五节 ——点语法和@property的更多相关文章

  1. OC self = [super init] , 点语法 , @property

    OC self = [super init] , 点语法 , @property 构造方法为啥这么写? self = [super init]; [super init] 的结果可能有三种: 第一种: ...

  2. 第四百一十五节,python常用排序算法学习

    第四百一十五节,python常用排序算法学习 常用排序 名称 复杂度 说明 备注 冒泡排序Bubble Sort O(N*N) 将待排序的元素看作是竖着排列的“气泡”,较小的元素比较轻,从而要往上浮 ...

  3. centos shell脚本编程1 正则 shell脚本结构 read命令 date命令的用法 shell中的逻辑判断 if 判断文件、目录属性 shell数组简单用法 $( ) 和${ } 和$(( )) 与 sh -n sh -x sh -v 第三十五节课

    centos   shell脚本编程1 正则  shell脚本结构  read命令  date命令的用法  shell中的逻辑判断  if 判断文件.目录属性  shell数组简单用法 $( ) 和$ ...

  4. centos Linux系统日常管理2 tcpdump,tshark,selinux,strings命令, iptables ,crontab,TCP,UDP,ICMP,FTP网络知识 第十五节课

    centos  Linux系统日常管理2  tcpdump,tshark,selinux,strings命令, iptables ,crontab,TCP,UDP,ICMP,FTP网络知识 第十五节课 ...

  5. 学习HTML 第五节.简单交互 加个按钮

    学习HTML 第五节.简单交互 也许你和我一样,对页面排版的兴趣小于网页交互,那么我们就先略过一些章节,直接先学一下简单交互. 前面点击图片打开链接的网址,已经是最简单的交互方式了,复杂的方式则需要用 ...

  6. 并发编程概述 委托(delegate) 事件(event) .net core 2.0 event bus 一个简单的基于内存事件总线实现 .net core 基于NPOI 的excel导出类,支持自定义导出哪些字段 基于Ace Admin 的菜单栏实现 第五节:SignalR大杂烩(与MVC融合、全局的几个配置、跨域的应用、C/S程序充当Client和Server)

    并发编程概述   前言 说实话,在我软件开发的头两年几乎不考虑并发编程,请求与响应把业务逻辑尽快完成一个星期的任务能两天完成绝不拖三天(剩下时间各种浪),根本不会考虑性能问题(能接受范围内).但随着工 ...

  7. ASP.NET MVC深入浅出系列(持续更新) ORM系列之Entity FrameWork详解(持续更新) 第十六节:语法总结(3)(C#6.0和C#7.0新语法) 第三节:深度剖析各类数据结构(Array、List、Queue、Stack)及线程安全问题和yeild关键字 各种通讯连接方式 设计模式篇 第十二节: 总结Quartz.Net几种部署模式(IIS、Exe、服务部署【借

    ASP.NET MVC深入浅出系列(持续更新)   一. ASP.NET体系 从事.Net开发以来,最先接触的Web开发框架是Asp.Net WebForm,该框架高度封装,为了隐藏Http的无状态模 ...

  8. Ext JS学习第十六天 事件机制event(一) DotNet进阶系列(持续更新) 第一节:.Net版基于WebSocket的聊天室样例 第十五节:深入理解async和await的作用及各种适用场景和用法 第十五节:深入理解async和await的作用及各种适用场景和用法 前端自动化准备和详细配置(NVM、NPM/CNPM、NodeJs、NRM、WebPack、Gulp/Grunt、G

    code&monkey   Ext JS学习第十六天 事件机制event(一) 此文用来记录学习笔记: 休息了好几天,从今天开始继续保持更新,鞭策自己学习 今天我们来说一说什么是事件,对于事件 ...

  9. 第五节:从一条记录说起——InnoDB记录结构

    <MySQL 是怎样运行的:从根儿上理解 MySQL>第五节:从一条记录说起——InnoDB记录结构 准备工作 现在只知道客户端发送请求并等待服务器返回结果.    MySQL什么方式来访 ...

随机推荐

  1. AngularJs ngCloak、ngController、ngInit、ngModel

    ngCloak ngCloak指令是为了防止Angular应用在启动加载的时候html模板将会被短暂性的展示.这个指令可以用来避免由HTML模板显示造成不良的闪烁效果. 格式: ng-cloak   ...

  2. wpf 窗体内容旋转效果 网摘

    <Window x:Class="simplewpf.chuangtixuanzzhuan"        xmlns="http://schemas.micros ...

  3. Redis学习-开始

    C:\Program Files\Redis\redis-cli.exe 使用servicestack.redis class Program { static void Main(string[] ...

  4. Java数据结构——容器总结

    4大容器——List.Set.Queue.Map List 1.ArrayList 优点:随机访问元素 缺点:插入和移除元素时较慢 2.LinkedList 优点:插入和删除元素 缺点:随机访问方面相 ...

  5. Java数据库——ResultSet接口

    使用SQL中的SELECT语句可以查询出数据库的全部结果,在JDBC的操作中数据库的所有查询记录将使用ResultSet进行接收,并使用ResultSet显示内容. 从user表中查询数据 //=== ...

  6. HTML学习笔记——图片显示、图片跳转、图片相对路径

    1>显示图片.用a标签实现点击图片跳转.地图标签/点击图片上固定区域跳转 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transit ...

  7. Java TCP编程

    Java编写TCP编程--回射信息实例 注:简单的tcp联系,还存在问题,readUTF()为阻塞型,如果之前的用户一直不输入,则一直阻塞,之后的用户再连接会出现问题. import java.io. ...

  8. PHP----遇到的Session问题

    使用SESSION,当跨页面使用时,会提示错误Cannot modify header information - headers already sent by..., 背景:使用session_s ...

  9. Echarts 页面多图自适应的解决办法 (转)

    项目中用到了echarts的多图表的 问题,如果设置了 window.onresize  = option.chart.resize() 只能控制 某个图表的 自适应,如果要是页面上的图表都要自适应. ...

  10. css div垂直居中

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...