@synthesize

Objective-C 之 @property和@synthesize

被刻印的时光 ゝ 提交于 2019-12-09 12:00:36
我用了不到一周的时间学习了Objective-C,后面的大部分时间我都在了解如何使用IOS的SDK和一些高级的话题,到目前已经有两个多月的时间了。目前能做一些简单的应用,但是在写代码的时候明显感觉到基础不够扎实,毕竟一周的时间只能对一门语言有个概览。要想精通一门语言是远远不够的。 所以我把自己学习过程中遇到的一些问题整理在博客上,这也是一个学习理解的过程。 今天要说的内容是Objective-C 中的 @property和@synthesize。在这之前先讲讲访问器(Accessor),也就是我们所知道的setter和getter方法。《Cocoa Design Patterns》中的将它归类为基础模式中的一种。访问器是很重要的技术,用来访问和设置对象的实例变量(不是指对象本身,而是对象中的属性)。有时候可能需要用不同的方式或者通过计算等方式来获取或设置实例变量,访问器给了我们很大的灵活性。在Cocoa中访问器有很多的优点: 实现灵活性 。 可以在访问器中改变并实现不同的实例变量访问方式而不影响其他代码。 可维护性 。通过访问器对实例变量的更改易于维护。 内存管理 。访问器方法提供了简单的方法去遵守Cocoa的约定把内存管理代码隔离在少部分代码中。 支持KVC和KVO 。 KVC和KVO是很强大的技术。但是它们依赖于正确命名访问器。 下面这段代码简单的实现了一个访问器

3.成员变量标准访问方法的实现(@property和@synthysize)

Deadly 提交于 2019-12-07 00:42:41
1、@property和@synthesize的用途: @property、@synthesize用于自动生成类成员变量的存取方法(setter方法和getter方法)。 @property用在头文件里边,而@synthesize用于源文件里边。( xcode4.5以及以后的版本,@synthesize可以省略) 在默认情况下,当源文件里边没有实现setter和getter方法时,通过synthysize可以自动生成标准的setter和getter方法。注意:通过synthysize实现的setter和getter都是原子性访问的。多线程同时访问时,保障访问方法同时只能被一个线程访问。 如: (1)YtsStudent.h: #import <Foundation/Foundation.h> @interface Student : NSObject { int _age; int _no; } @property int age; @property int no; @end (2)YtsStudent:m #import "Student.h" @implementation Student @synthesize age=_age, no=_no,name; //因为代码中没有定义成员变量name,所以系统将自动生成一个成员变量name。 @end 2、