OC .(点)与->(箭头)用法区别
这两天同学总是问OC里.和->的用法区别,当时回答的不是很好,周末查了一下,大概清楚了,在这里记录一笔。
先看这个例程
#import <Foundation/Foundation.h>
@interface Test : NSObject
{
int temp; //成员变量
}
@end
@implementation Test
@end
int main()
{
Test *t = [[Test alloc] init];
t->temp = 100;
NSLog(@"%d",t->temp);
return 0;
}
这里
t->temp = 100;
NSLog(@"%d",t->temp);
这两行中的t->temp会提示错误,错误说明为instance varviable “temp” is protected。说明是可以访问的,但是因为受保护所以报错,那我们把权限改成public试试。
@public
int temp; //成员变量
结果显示通过,没有错误,说明想法是对的。
接下来再看看.点语法
#import <Foundation/Foundation.h>
@interface Test : NSObject
{
int temp; //成员变量
}
@end
@implementation Test
@end
int main()
{
Test *t = [[Test alloc] init];
t.temp = 100;
NSLog(@"%d",t.temp);
return 0;
}
把代码中的t->temp改成lt.temp,发现又会报错,错误说明为Propetery temp not found。。。,也即是说没有找到temp这个属性,当然找不到,因为我们没有定义这个属性。
这时再在成员变量的声明后加一行代码
@property int temp;
代码通过,没有错误,说明.点语法是用来访问属性的。再进一步猜想@propetery是声明set、get方法,要是我有set、get方法没有声明@propetery可不可以呢,试试就知道
#import <Foundation/Foundation.h>
@interface Test : NSObject
{
int temp; //成员变量
}
-(void)setTemp:(int)temp;
-(int)Temp;
@end
@implementation Test
-(void)setTemp:(int)temp
{
}
-(int)Temp
{
}
@end
int main()
{
Test *t = [[Test alloc] init];
t.temp = 100;
NSLog(@"%d",t.temp);
return 0;
}
偷懒没有实现方法,但是同样没有报错,也就说明证实了猜想。
至此大概清楚.(点)和->(箭头)的区别了:
.(点语法)是访问类的属性,本质是调用set、get方法。
->是访问成员变量,但成员变量默认受保护,所以常常报错,手动设为public即可解决
OC .(点)与->(箭头)用法区别的更多相关文章
- order_by_、group_by_、having的用法区别
写于 2012-11-20 22:14 doc文档上. Having 这个是用在聚合函数的用法.当我们在用聚合函数的时候,一般都要用到GROUP BY 先进行分组,然后再进行聚合函数的运算.运算完后 ...
- html中的alt和title用法区别
html中的alt和title用法区别 首先明确一下概念,alt是html标签的属性,而title既是html标签,又是html属性.title标签这个不用多说,网页的标题就是写在<title& ...
- 转 SQL Union和SQL Union All两者用法区别效率以及与order by 和 group by配合问题
SQL Union和SQL Union All两者用法区别效率以及与order by 和 group by配合问题 SQL Union和SQL Union All用法 SQL UNION 操作符 UN ...
- css选择器,有箭头与没箭头的区别
div > span 和 div span 的区别 ,即有箭头和没箭头的区别 div > span span 是 div 的下一层级关系 在这种情况下找得到span元素: <div& ...
- php中strstr、strrchr、substr、stristr四个函数用法区别
php中strstr.strrchr.substr.stristr四个函数用法区别: php中strstr strrchr substr stristr这四个字符串操作函数特别让人容易混淆,常用的是s ...
- mysql SELECT FOUND_ROWS()与COUNT(*)用法区别
在mysql中 FOUND_ROWS()与COUNT(*)都可以统计记录,如果都一样为什么会有两个这样的函数呢,下面我来介绍SELECT FOUND_ROWS()与COUNT(*)用法区别 SEL ...
- php中print_r、var_dump和var_export几个函数的用法区别
php中print_r.var_dump和var_export几个函数的用法区别
- Oracle中 (+)与left join 的用法区别
Oracle中 (+)与left join 的用法区别 原创 2017年01月11日 13:33:42 6648 select * from a,b where a.id=b.id(+); (+)写在 ...
- String split方法与Guava Splitter用法区别
String split方法与Guava Splitter用法区别 今天同事写了一段使用String split方法的代码,如下所示,同事期望得到的是字符"1",但是没想到却得到空 ...
随机推荐
- java并发5-volatile关键字解析
http://www.cnblogs.com/dolphin0520/p/3920373.html 一.内存模型的相关概念 大家都知道,计算机在执行程序时,每条指令都是在CPU中执行的,而执行指令过程 ...
- Angular service, 服务
早上开车上班, 发现车快没油了, 于是拐进加油站. 有一辆出租车也在加油.. Angular service在一个应用里是以单例形式存在的. 这个单例的实例是由service factory( ...
- VS2010发布、打包安装程序
1. 在vs2010 选择“新建项目”→“ 其他项目类型”→“ Visual Studio Installer→“安装项目”: 命名为:Setup1 . 这是在VS2010中将有三个文件夹, 1.“应 ...
- Linux之V4L2视频采集编程详解
V4L2(Video For Linux Two) 是内核提供给应用程序访问音.视频驱动的统一接口. Linux系统中,视频设备被当作一个设备文件来看待,设备文件存放在 /dev目录下,完整路径的设 ...
- AngularJS和ReactJS对比
Angular的特点: 优势: AngularJS是一套完整的框架,angular有自带的数据绑定.render渲染.angularUI库,过滤器,$filter,$directive(模板),$se ...
- hdu1547之BFS
Bubble Shooter Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) T ...
- HDU4612(Warm up)2013多校2-图的边双连通问题(Tarjan算法+树形DP)
/** 题目大意: 给你一个无向连通图,问加上一条边后得到的图的最少的割边数; 算法思想: 图的边双连通Tarjan算法+树形DP; 即通过Tarjan算法对边双连通缩图,构成一棵树,然后用树形DP求 ...
- C# 泛型多种参数类型与多重约束 示例
C# 泛型多种参数类型与多重约束 示例 interface IMyInterface { } class Dictionary<TKey, TVal> where TKey : IComp ...
- 基本SQL语句练习之SELECT
一.SQL Plus连接sqlplus:以命令行方式连接数据库sqlplusw:以窗口登录方式连接数据库conn sys/password as sysdba;show userselect * fr ...
- nginx安装(正式)
一.安装说明 系统环境:CentOS Linux release 7.2.1511 (Core) 系统内核:3.10.0-327.el7.x86_64软件:nginx-1.10.1.tar.gz其他所 ...