OC点语法和变量作用域
OC点语法和变量作用域
一、点语法
(一)认识点语法
声明一个Person类:
#import <Foundation/Foundation.h> @interface Person : NSObject
{
int _age;//默认为@protected
} - (void)setAge:(int)age;
- (int)age; @end
Person类的实现:
#import "Person.h" @implementation Person - (void)setAge:(int)age
{
_age = age;// 不能写成self.age = newAge,相当与 [self setAge:newAge];
} - (int)age //get方法
{
return _age;
} @end
点语法的使用:
#import <Foundation/Foundation.h>
#import "Person.h" int main(int argc, const char * argv[])
{ @autoreleasepool { // insert code here...
Person *person = [[Person alloc] init]; //[person setAge:10];
person.age = ;//点语法,等效与[person setAge:10];
//这里并不是给person的属性赋值,而是调用person的setAge方法 //int age = [person age];
int age = person.age;//等效与int age = [person age]
NSLog(@"age is %i", age);
[person release]; }
return ;
}
(二)点语法的作用
OC设计点语法的目的,是为了让其他语言的开发者可以很快的上手OC语言开发,使用点语法,让它和其他面向对象的语言如java很像。
(三)点语法的本质
点语法的本质是方法的调用,而不是访问成员变量,当使用点语法时,编译器会自动展开成相应的方法。切记点语法的本质是转换成相应的set和get方法,如果没有set和get方法,则不能使用点语法。
如:
Stu.age=10;展开为:[stu setAge:10];
int a=stu.age;展开为:[stu age];
编译器如何知道是set方法还是get方法?主要是看赋值(可以使用断点调试来查看)。
在OC中访问成员变量只有一种方式即使用-> 如stu->age,这种情况要求在@public的前提下。
(四)点语法的使用注意
下面的使用方式是一个死循环:
(1)在set方法中,self.age=age;相当于是[self setAge:age];
(2)在get方法中,return self.age;相当于是[self age];
二、变量作用域
(一)变量的作用域主要分为四种:
(1)@public (公开的)在有对象的前提下,任何地方都可以直接访问。
(2)@protected (受保护的)只能在当前类和子类的对象方法中访问
(3)@private (私有的)只能在当前类的对象方法中才能直接访问
(4)@package (框架级别的)作用域介于私有和公开之间,只要处于同一个框架中就可以直接通过变量名访问
(二)使用注意和补充
(1)在类的实现即.m文件中也可以声明成员变量,但是因为在其他文件中通常都只是包含头文件而不会包含实现文件,所以在这里声明的成员变量是@private的。在.m中定义的成员变量不能喝它的头文件.h中的成员变量同名,在这期间使用@public等关键字也是徒劳的。
(2)在@interface @end之间声明的成员变量如果不做特别的说明,那么其默认是protected的。
(3)一个类继承了另一个类,那么就拥有了父类的所有成员变量和方法,注意所有的成员变量它都拥有,只是有的它不能直接访问。
OC点语法和变量作用域的更多相关文章
- 李洪强iOS开发之OC点语法和变量作用域
OC点语法和变量作用域 一.点语法 (一)认识点语法 声明一个Person类: 1 #import <Foundation/Foundation.h> 2 3 @interface Per ...
- OC 点语法和变量作用域
一.点语法 (一)认识点语法 声明一个Person类: 1 #import <Foundation/Foundation.h> 2 3 @interface Person : NSObje ...
- OC的特有语法-分类Category、 类的本质、description方法、SEL、NSLog输出增强、点语法、变量作用域、@property @synthesize关键字、Id、OC语言构造方法
一. 分类-Category 1. 基本用途:Category 分类是OC特有的语言,依赖于类. ➢ 如何在不改变原来类模型的前提下,给类扩充一些方法?有2种方式 ● 继承 ● 分类(Categor ...
- Python基本语法_变量作用域LEGB
目录 目录 软件系统 变量的作用域 高级语言对数据类型的使用过程 作用域的产生 作用域的类型 Llocal局部作用域 Eenclosing嵌套作用域 Gglobal全局作用域 Bbuilt-in内置作 ...
- [Objective-c 基础 - 2.5] .h和.m文件,点语法,成员变量作用域
A. 命令行编译和XCode编译 1.在存在多个.m源码实现文件的情况下,若根据需要引入.m文件,使用命令行仅仅编译主.m文件即可,但是XCode会同时编译全部.m文件,会发生编译错误(重复定义全局变 ...
- OC 成员变量作用域
1. 成员变量作用域: @public :在任何地方都能直接访问对象的成员变量. @private :只能在当前类的对象方法中直接访问.(@implementation中默认是@priv ...
- [Objective-c 基础 - 2.2] OC弱语法、类方法
A.OC弱语法 1.在运行的时候才会检查方法的声明和实现 2.没有声明只有实现的方法也能正常运行,只要在调用之前定义即可 3.类的声明必须存在,否则会出现运行时错误 B.类方法 1.是类名调用的方 ...
- linux shell自定义函数(定义、返回值、变量作用域)介绍
http://www.jb51.net/article/33899.htm linux shell自定义函数(定义.返回值.变量作用域)介绍 linux shell 可以用户定义函数,然后在shell ...
- golang变量作用域问题-避免使用全局变量
最近遇到了一个变量作用域的问题,一个比较低级的问题,可能作为一个熟手不应该犯这样的低级错误,但是golang的语法特点可能让你稍微不注意就踩坑,嘿嘿. 变量作用域 全局变量的作用域是整个包,局部变量的 ...
随机推荐
- JAVA 设计模式 组合模式
用途 组合模式 (Component) 将对象组合成树形结构以表示“部分-整体”的层次结构.组合模式使得用户对单个对象和组合对象的使用具有唯一性. 组合模式是一种结构型模式. 结构
- l5如何通过路由走api版本回退查找设置
l5如何通过路由走api版本回退查找设置 具体需求 当前遇到的问题是使用laravel写接口,但是接口是有版本号的,我们把版本号放在url中,比如: http://yejianfeng.com/api ...
- SQL--分页查询
SELECT * FROM ( SELECT ROW_NUMBER() OVER ( ORDER BY EmployeeID DESC ) AS Rownumber , ...
- dp or 贪心 --- hdu : Road Trip
Road Trip Time Limit: 1000ms, Special Time Limit:2500ms, Memory Limit:65536KB Total submit users: 29 ...
- 【Win10】在应用中使用 SQLite 数据库
在绝大多数应用中,免不了要做的一项就是设置这样的本地数据存储.简单的数据存储我们可以使用 LocalSettings 或者 IsolatedStorageFile(独立存储)等等的方式来进行本地数据存 ...
- SignalR入门之小试身手
建立好持久性连接类TestConnection之后,现在为我们的SignalR程序配置持久性连接类以及访问路径. 进入刚刚建立的Startup类,进入Configuration这个方法里来配置: us ...
- css3飞机起飞进度条
效果:http://hovertree.com/texiao/css3/27/ 源码下载:http://hovertree.com/h/bjaf/pgwql1x2.htm 本效果使用Font Awes ...
- C# ~ 从 XML 到 Linq 到 Linq to XML
.XML 可扩展标记语言 (Extensible Markup Language), 标记 (markup) 是关键部分,是标准通用标记语言 (Standard Generalized Markup ...
- [转]PHP编码规范
注:这是10年前的一篇PHP编码规范,最早发布于清华水木BBS,现在好像都找不到完整的版本了,但至今看起来仍是非常有参考意义.个人会根据经验做一些调整.文中对于命名一段的描述极大的曾启发了个人的编程体 ...
- 安装Sublime Text 3汉化插件
一.Sublime Text工具介绍: Sublime Text 是一个代码编辑器(Sublime Text 2是收费软件,但可以无限期试用),也是HTML和散文先进的文本编辑器.Sublime Te ...