OC中点语法、property跟synthesize用法

一: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中不能访问(_成员变量)

时间: 2024-08-05 19:35:58

OC中点语法、property跟synthesize用法的相关文章

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

@代表“Objective-C”的标志,证明您正在使用Objective-C语言 Objective-C语言关键词,@property与@synthesize配对使用. 功能:让编译好器自动编写一个与数据成员同名的方法声明来省去读写方法的声明. 如: 1.在头文件中: C代码   @property int count; 等效于在头文件中声明2个方法: C代码   - (int)count; -(void)setCount:(int)newCount; 2.实现文件(.m)中 C代码   @sy

OC基础--关键字@property 和 @synthesize

一.@property关键字需要掌握的知识: 1.用在@interface中,用来自动生成setter和getter的声明 例:@property int age;--相当于执行了右边的代码-->-(void) setAge:(int) age; -(int) age; 二.@synthesize关键字需要掌握的知识: 1.用在@implementation中,用来自动生成setter和getter的实现 例:@synthesize age = _age; 2.注意:在 @synthesize

黑马程序员————OC中点语法、id类型和构造方法

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- id:万能指针(内部已经包含*),能指向任何OC对象,只能使用于OC对象   id == NSObject * 构造方法:用来初始化对象的方法,是个对象方法,而且减号开头   init 完整地创建一个可用的对象 1.分配存储空间    +

黑马程序员—OC点语法和成员变量作用域

一.点语法 1.OC中点语法是方便从事别的语言开发的程序员迅速的转到OC开发当中,先看下面这个例子: 1 // 声明一个Person类 2 @interface Person : NSObject 3 { 4 int _age; 5 NSString *_name; 6 } 7 - (void)setAge:(int)age; 8 - (int)age; 9 @end 10 11 // 实现Person类 12 @implementation Person 13 - (void)setAge:(

黑马程序员------OC之点语法、成员变量作用域、@property和@synthesize

-----iOS培训.Android培训.Java培训,期待与您交流----- OC之点语法.成员变量作用域.@property和@synthesize 一.点语法 1)点语法基本概念:当我们使用面向对象的封装特性后,将成员变量私有化,采取使用setter方法和getter方法向外面提供成员变量访问方案.那么我们知道,OC的调用方法的方式是很独特的,采用的是 [对象名(类名)  方法名]  的方式 ,那么很多Java.C#程序员就不习惯了,在Java.C#这些主流的面向对象语言中,调用方法的方式

OC语法5——@property和@synthesize

@property和@synthesize: 我们回想一下: 在OC中我们定义一个Student类需要两个文件Student.h 和 Student.m. Student.h(声明文件):定义成员变量,并且为了使外界可以访问操作这些成员变量,需要定义set和get方法提供给外界.最后还要定义自定义的功能方法. Student.m(实现文件):实现文件实现set和get方法,并且实现自定义的功能方法. 假如,Student类中有很多个成员变量,那我们若手动定义成员变量,再一个一个声明它们的set和

@property、@synthesize和dynamic的用法

原文:  http://blog.csdn.net/hherima/article/details/8622948 @代表“Objective-C”的标志,证明您正在使用Objective-C语言 Objective-C语言关键词,@property与@synthesize配对使用. 功能:让编译器自动编写一个与数据成员同名的方法声明来省去读写方法的声明. 如: 1.在头文件中: @property int count; 等效于在头文件中声明2个方法,即通常说的GetXXX  SetXXX. -

OC基础之-Property(属性)和点语法

学习属性之前回忆一下之前学到的setter方法和getter方法: (1)setter方法的作用:用来为单一的实例变量赋值(只能是一个实例变量,多了的叫做get方法) (2)setter方法的写法标准: - 号方法,  无返回值,   名字以set开头+要设置的变量的实例变量名(首字母需大写):(setter方法有且只有一个参数)+参数的类型(和实例变量的类型相同)+参数名(和实例变量名相同) (3)getter方法的作用:用来获取单一实例变量的值. (4)getter方法的写法标准: - 号方

黑马程序员---OC---点语法、属性作用域、@property与@synthesize、id、构造方法、分类

------iOS培训.Java培训.Android培训, iOS学习型技术博客,期待与您交流------                                    点语法 点语法的本质是方法调用:调用对象成员变量的setter和getter 是编译器特性,编译器帮忙转的 p.age = 25;       // 等价于 [p setAge:25]; int a = p.age;     // 等价于 int a = [p age]; // 访问成员变量不能用点语法,而是 p->_a