一:OC中得点语法

1> 点语法的基本使用:
·使用 对象.成员变量   可以实现设置成员变量值,和获取成员变量的值
 
2> 点语法的本质 (点语法是Xcode编译器自己帮我们完成的一个功能)
     实际上点语法就是set和get方法,当编译遇到点语法时,编译器就会将点语法转成set和get方法。
注意:也就是说,如果类中没有实现set和get方法,那么就不会有点语法
 
p.name = @“”; 实际上就是 [p setName:@“”];
 
在OC中访问成员变量只有一种方式即使用-> 如stu->age,这种情况要求在@public的前提下。
 
3> 点语法的注意点
下面的使用方式是一个死循环:

(1)在set方法中,self.age=age;相当于是[self setAge:age];

(2)在get方法中,return self.age;相当于是[self age];
也就是说,在set和get方法中不能使用(self点成员变量)造成死循环
当然了如果访问成员变量的话可以使用_成员变量。
 
例子:
- (void)setAge:(int)age
 {
     _age = age;// 不能写成self.age = newAge,相当与 [self setAge:newAge]; }

self.age = age (错误,死循环)

 }
 
二:property和synthesize关键字的使用
注意:这两个关键字是编译器特性,让xcode可以自动生成getter和setter的声明和实现。
1)@propery int age;   在4.4之前是帮我们声明age的get和set方法

编译时遇到这一行,则自动扩展成下面两句:

- (void)setAge:(int)age;

- (int)age;

 

2)@synthesize age;     在4.4之前,帮我们实现get和set方法

.m文件中帮我们生成一个私有的变量age

.m中的变量是不能够被继承的

@synthesize age = _age; 表示 get 和set方法 指定设置_age的值

当然了4.4之前我们需要声明(_成员变量)

3)@property int age;

在xcode4.4之后

1)声明age的get和set方法

2)实现age的get和set方法

3)生成一个_age(.h声明) (我们不用单独声明(_成员变量)

注意:

1,这种方式生成的成员变量是private的。(因此在后面我们在子类或者外部通过点语法也就是get和set方法来访问@property修饰的成员变量)

2,可以通过在{}中加上int _age;显示的声明_age为protected的。

3,原则:get和set方法同变量一样,如果你自己定义了,那么就使用你已经定义的,如果没有定义,那么就自动生成一个。

4,手动实现:

1)如果手动实现了set方法,那么编译器就只生成get方法和成员变量;

2)如果手动实现了get方法,那么编译器就只生成set方法和成员变量;

3)如果set和get方法都是手动实现的,那么编译器将不会生成成员变量。

5,在@property中readonly修饰的成员变量只有get方法,也就是只有取值不能改值,

目前遇到一个问题,readonly修饰的NSString成员属性,.m中可以通过(_成员变量)但是UI控件的话,.m中不能访问(_成员变量)

@property用在 .h 头文件中用作声明,@synthesize用在.m 文件中用于实现。

注释:在Xcode4.5及以后的版本中,可以省略@synthesize ,编译器会自动帮你加上getter 和 setter 方法的实现,并且默认会去访问_age这个成员变量,如果找不到_age这个成员变量,会自动生成一个叫做 _age的私有成员变量。

读写属性: (readwrite/readonly)
setter语意:(assign/retain/copy)
原子性: (atomicity/nonatomic)

各参数意义如下: 
readwrite: 产生setter\getter方法
readonly: 只产生简单的getter,没有setter。
assign: 默认类型,setter方法直接赋值,而不进行retain操作
retain: setter方法对参数进行release旧值,再retain新值。
copy: setter方法进行Copy操作,与retain一样
nonatomic: 禁止多线程,变量保护,提高性能

ios中点语法、property跟synthesize用法的更多相关文章

  1. Objective-C中的@property和@synthesize用法

    @代表“Objective-C”的标志,证明您正在使用Objective-C语言 Objective-C语言关键词,@property与@synthesize配对使用. 功能:让编译好器自动编写一个与 ...

  2. iOS 详细解释@property和@synthesize关键字

    /** 注意:由@property声明的属性 在类方法中通过下划线是获取不到的 必须是通过 对象名.属性 才能获取到!- @property和@synthesize关键字是针对成员变量以及get/se ...

  3. [转]iOS开发中@property的属性weak nonatomic strong readonly等介绍

    转载地址: http://www.lvtao.net/ios/504.html @property与@synthesize是成对出现的,可以自动生成某个类成员变量的存取方法.在Xcode4.5以及以后 ...

  4. iOS 内存管理-copy、 retain、 assign 、readonly 、 readwrite、nonatomic、@property、@synthesize、@dynamic、IB_DESIGNABLE 、 IBInspectable、IBOutletCollection

    浅谈iOS内存管理机制 alloc,retain,copy,release,autorelease 1)使用@property配合@synthesize可以让编译器自动实现getter/setter方 ...

  5. @property、@synthesize和dynamic的用法

    原文:  http://blog.csdn.net/hherima/article/details/8622948 @代表“Objective-C”的标志,证明您正在使用Objective-C语言 O ...

  6. (iOS)关于@property和@synthesize的理解(原创)

    开始学习ios的时候,就对一些objc的语法不理解,就比如@property和@synthesize,之前都是记住然后照着用,但是写的代码多了,对objc和ios有了一些理解,再加上最近用MRC,所以 ...

  7. Objective-C 点语法 成员变量的作用域 @property和@synthesize关键字 id类型

    点语法 1.利用点语法替换set方法和get方法 方法调用 Student *stu = [Student new]; [stu setAge : 18]; int age = [stu age]; ...

  8. OC语法5——@property和@synthesize

    @property和@synthesize: 我们回想一下: 在OC中我们定义一个Student类需要两个文件Student.h 和 Student.m. Student.h(声明文件):定义成员变量 ...

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

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

随机推荐

  1. hdu_5898_odd-even number(数位DP)

    题目链接:hdu_5898_odd-even number 题意: 给你一个区间,问你这个区间中满足连续的偶数的位数为奇数,连续的奇数的位数是偶数的个数 题解: 设dp[i][j][k][l]为考虑当 ...

  2. HDU 1258 Sum It Up(DFS)

    题目链接 Problem Description Given a specified total t and a list of n integers, find all distinct sums ...

  3. 201312月CCF-2,ISBN号码分析

    明天要考CCF啦,偶还是很紧张的.最近看了数据结构,今天才开始上机练习,对,我就是这么懒..废话不多说,我写这篇文章主要是分析CCF编程的小窍门,因为在网上没找到,所以我决定自力更生丰衣足食.!!!! ...

  4. kali linux 更新软件源,安装中文输入法,修复Linux与windows引导菜单解决windows引导丢失

    1. 更新软件源打开sources.list文件,进行添加更新源:leafpad /etc/apt/sources.list 2. 添加软件源#官方源 deb http://http.kali.org ...

  5. hadoop namespace

    As underscore(_) is not allowed. It may be the problem if your other configuration are ok. Your conf ...

  6. 笨方法学python--提示别人

    1 上次学到使用raw_input(), 还可以如下使用: age = raw_input("age?") 2 命令名查看raw_input的说明 unit, pydoc raw_ ...

  7. Memcached启动脚本

    ched: MemCached Daemon # # chkconfig: - # description: MemCached Daemon # # Source function library. ...

  8. Oracle Day01 数据库基础

    1.数据库 它是一种软件产品,是用于存放数据.管理数据的存储仓库,是有效组织在一起的数据集合. 2.数据库和数据库对象的概念 数据库:指的是物理磁盘上的文件 数据库对象:存在于内存中用于跟数据库文件进 ...

  9. ZOJ 649 Rescue(优先队列+bfs)

    Rescue Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  10. Codeforces Round #375 (Div. 2)A. The New Year: Mee

    A. The New Year: Meeting Friends time limit per test 1 second memory limit per test 256 megabytes in ...