一、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 ngClass、ngClassEven、ngClassOdd、ngStyle

    这几个都关于样式及类名修改的,所以先把样式代码贴上吧. .red{color:red} .blue{color:blue} 写案例用到的样式就这么简单的两个,下面进入正题. ngClass ngCla ...

  2. Java中StringBuilder的清空方法比较

    StringBuilder 没有提供clear或empty方法.清空有3种方法:1)使用delete2)新生成一个,旧的由系统自动回收3)使用setLength 将三种方法循环1000万次,代码: p ...

  3. JavaScript中捕获/阻止捕获、冒泡/阻止冒泡

    JavaScript中捕获/阻止捕获.冒泡/阻止冒泡 事件流描述的是从页面中接收事件的顺序.提出事件流概念的正是IE和Netscape,但是前者提出的是我们常用的事件冒泡流,而后者提出的是事件捕获流. ...

  4. 签名有元程序集 Signed Friend Assemblies

    下面的例子演示了创建签名程序集和有元程序集.这就要求两个程序集都是强命名,在下面的例子中,两个程序集都用了同一个秘钥,也可以用不同的秘钥. 1. 生成秘钥, 这个在前面的博客中有说明,生成秘钥文件sn ...

  5. python--文件删除、判断目录存在、字符串替换

    昨晚笔试了金山WPS的测试开发卷,做个笔记(但不是答案,只是我的想法),关于文件和字符串的处理正在写入与完善至上一篇的博客中,现在题目如下: 1.使用脚本语言删除E:\abc目录下的所有文件: 利用o ...

  6. 如何修改Linux主机名

    Linux 下什么都比较麻烦,就连修改主机名也不例外.我们就下文说一下具体方法. Linux 安装好后,其默认的主机名是 localhost.修改 Linux 主机名需要3步. 使用 hostname ...

  7. Java简单的系统登陆

    class Check{ public boolean validate(String name,String password){ if(name.equals("lixinghua&qu ...

  8. Java引用机制——reference

    所谓引用传递就是指将堆内存空间的使用权交给多个栈内存空间. 例子<1> public class Aliasing { int temp = 30; public static void ...

  9. Ubuntu——"xxx is not in the sudoers file.This incident will be reported" 错误解决方法

    Ubuntu下普通用户用sudo执行命令时报如题所示错误,解决方法就是在/etc/sudoers文件里给该用户添加权限.如下: 1.切换到root用户下 2./etc/sudoers文件默认是只读的, ...

  10. JS实现表格排序

    今天有点闲,写个小东西,使用JS实现点击表格标题栏实现自动排序功能,嘻嘻... 一.JS代码,文件名为code.js如下: (function($){ //插件 $.extend($,{ //命名空间 ...