Objective-C 【点语法】
———————————————————————————————————————————
点语法的使用
//
//  点语法的使用
//
//  点语法:   xcode的一种特性,xcode帮我们做代码替换
//  点语法的格式:   对象.属性名
//
一段代码:
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
    NSString *_name;
    int _age;
}
-(void)setName:(NSString *)name;
-(NSString *)name;
-(void)setAge:(int)age;
-(int)age;
@end
#import "Person.h"
@implementation Person
-(void)setName:(NSString *)name
{
    NSLog(@"这是name的set方法!");
    _name=name;
}
-(NSString *)name
{
    NSLog(@"这是name的get方法!");
    return _name;
}
-(void)setAge:(int)age
{
    NSLog(@"这是age的set方法!");
    _age=age;
}
-(int)age
{
    NSLog(@"这是age的get方法!");
    return _age;
}
@end
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        Person *p=[Person new];
//        先用普通的方法去调用set和get方法,我们在set和get方法中加入了一行输出语句,来判断是否被调用
//        [p setName:@"Wang"];
//        [p setAge:18];
//        
//        [p name];
//        [p age];
        
//        再使用点方法
//        p.name=@"Wang";
//        p.age=18;
//        
//        NSString *a=p.name;
//        int b=p.age;
//        显然点方法也同样的调用了set和get方法,和上面的语句作用是一致的
//        但是,需要注意的是,此时的点方法(p.age和p.age=18)并不是直接访问实例变量,并不是看到p.age=18;就是给age赋值,而是Xcode看到点语法的语句后,自动帮我们替换成:
//        p.age=18; ————替换成————> [p setAge:18];
//        p.age; ————替换成————> [p age];
//        那么问题来了,我们调用set方法和get方法的点语法十分的相似,都是p.age,那么系统是怎么区分的呢?
//        显然,系统有自己的区分机制。一般而言,p.age出现在等号左侧就代表替换成set方法,p.age出现在等号右侧就替换成get方法。
//        当然这是一般情况,如果是 NSLog(@"%d",p.age); 的话,没有等号,怎么办呢?所以,其真正的原理是:如果 设置值(写),那么就替换成set方法;如果 取值(读),那么就替换成get方法。
    }
    return 0;
}
———————————————————————————————————————————
点语法的注意事项
注意:
①我们可以看到,上一段我们介绍的点语法,都是   实例对象名.属性名   的形式去调用的。
那么看下面的一段代码:
-(void)setAge:(int)age
{
    self.age=age;
}
★self表示当前对象,然后用当前对象调用点语法,去写这个set方法,这样显然是错误的!!!
上面的代码相当于:
-(void)setAge:(int)age
{
    [self setAge:age];   //死循环
}
★我们一定要记住,点语法不是直接去访问实例变量,而是Xcode的一种替换代码的手段,本质上是方法的调用,使用点语法的时候,编译器会自动将点语法展开成相应的set、get方法。上面是一个设置值的语句,所以点语法表示的是调用set方法。这样说来,你在set方法里面再调用set方法,不就是死循环了么!!!
②还是强调一下点语法的本质,点语法的本质是转换成相应的set、get方法,如果没有set、get方法,这不能使用点语法。所以使用点语法之前要先写set/get方法。
———————————————————————————————————————————
版权声明:本文为博主原创文章,未经博主允许不得转载。
Objective-C 【点语法】的更多相关文章
- objective-c基础教程——学习小结
		
objective-c基础教程——学习小结 提纲: 简介 与C语言相比要注意的地方 objective-c高级特性 开发工具介绍(cocoa 工具包的功能,框架,源文件组织:XCode使用介绍) ...
 - ArcGIS Runtime SDK for iOS开发系列教程(5)——要素信息的绘制
		
在客户端绘制点.线.面要素是GIS应用的基本功能,这一讲我将向大家介绍在iOS中如何来实现这一功能.大家都知道在Flex.Silverlight.js中对于要素的绘制都有一个叫GraphicsLaye ...
 - Automake
		
Automake是用来根据Makefile.am生成Makefile.in的工具 标准Makefile目标 'make all' Build programs, libraries, document ...
 - Objective - C中属性和点语法的使用
		
一.属性 属性是Objective—C 2.0定义的语法,为实例变量提供了setter.getter方法的默认实现能在一定程度上简化程序代码,并且增强实例变量的访问安全性 ...
 - iOS开发核心语言Objective C —— 面向对象思维、setter和getter方法及点语法
		
本分享是面向有意向从事iOS开发的伙伴们.或者已经从事了iOS的开发人员.假设您对iOS开发有极高的兴趣,能够与我一起探讨iOS开发.一起学习,共同进步.假设您是零基础,建议您先翻阅我之前分享的iOS ...
 - 初学Objective - C语法之代码块(block)
		
一.block声明 1.无参数,无返回值: void (^sayHi)(); 2.有参数,有返回值: NSInteger (^operateOfValue)(NSInteger num); block ...
 - Objective-C( 语法二)
		
分类(Category):可以给某一个类扩充一些方法(不修改原来类的代码) 作用:在不改变原来类内容基础上,可以为类增加一些方法 使用注意: 1. 只能增加方法,不能增加成员变量 2. 分类方法 ...
 - objective-c 语法快速过(1)
		
有一定 c++或者 java 基础,过一遍 oc 语法即可,都是相通的,个人认为难点是 oc 的内存管理,虽然有了 ARC,但是也需要学习下,因为有旧软件的维护. 建立在C语言的基础上,增加了一层小范 ...
 - Objective的字符串拼接 似乎没有Swift方便,但也可以制做一些较为方便的写法
		
NSString *str1 = @"字符串1"; NSString *str2 = @"字符串2"; //在同样条件下,Objective的字符串拼接 往往只 ...
 - [转] 从 C 到 Objective C 入门1
		
转自: http://blog.liuhongwei.cn/iphone/objective-c/ 进军iPhone开发,最大的难点之一就是怪异的Objective C语法了.不过,了解之后才发现,原 ...
 
随机推荐
- java中hashcode和equals的区别和联系
			
HashSet和HashMap一直都是JDK中最常用的两个类,HashSet要求不能存储相同的对象,HashMap要求不能存储相同的键. 那么Java运行时环境是如何判断HashSet中相同对象.Ha ...
 - delphi 13 打印相关
			
打印 页面设置 打印预览 文档属性 //---------------------------------------------------------------------------- ...
 - HDU 2037 今年暑假不AC (贪心)
			
今年暑假不AC Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
 - jQuery事件之on()方法绑定多个选择器,多个事件
			
这样一个需求,如果用live()方法实现的话 非常简单,容易理解. $('nav li, #sb-nav li, #help li').live('click', function () { // c ...
 - YAR 并行RPC框架研究
			
前几天,部门召开了PHP技术峰会 学习会议,大家分别对这次会议的PPT 做了简单的介绍, 其中提到了 鸟哥[惠新辰]的一篇PPT<微博LAMP 演变>,如果谁有需要可以去谷歌搜,或者去 h ...
 - Yar - Yet Another RPC framework for PHP
			
Introduction Yar is a RPC framework which aims to provide a simple and easy way to do communication ...
 - win7 debian 双系统修改引导项顺序
			
转载:http://jingyan.baidu.com/article/72ee561aa1d123e16138df81.html 问题描述: 个人在宿舍使用的比较多的是Window 7,而它的启动项 ...
 - uboot_starts_analysis.pdf
			
Uboot中start.S源码的指令级的详尽解析 HTML版本的在线地址为:http://www.crifan.com/files/doc/docbook/uboot_starts_analysis/ ...
 - CentOS(一)--CentOS6.4环境搭建
			
一.前言 作为一个想从事j2ee后台开发的程序猿,linux系统怎能不学呢?所以,这几天自己准备学习一下linux操作系统.废话不多说,直奔主题. 要学linux开发,首先得要安装linux系统吧,这 ...
 - 给jdk写注释系列之jdk1.6容器(10)-Stack&Vector源码解析
			
前面我们已经接触过几种数据结构了,有数组.链表.Hash表.红黑树(二叉查询树),今天再来看另外一种数据结构:栈. 什么是栈呢,我就不找它具体的定义了,直接举个例子,栈就相当于一个很窄的木桶 ...