Objective-C中的存取方法
2016-02-26 23:27
417 查看
存取方法是用来读取或改变某个对象属性的方法。如果要对其他对象中的属性进行操作,应该尽量使用对象提供的存取方法,绝对不能直接改变对象里面的值。比如我们将要列出的程序:main()函数不应直接访问Car类的engine实例变量(通过car->engine的方法)来改变engine属性,而应使用setter方法进行更改,使用存取方法间接地访问car对象中的engine,可以让car的实现更为灵活。
下面来看看博主摘抄的程序代码例子:
我们编写程序使用存取方法时,setter方法和getter一般是成对使用的,但也有单个使用的情况。setter方法用来设置属性的值,getter方法用来读取属性的值。可以使用setter方法来设置密码,使用getter获取文件大小等等。
对于存取方法的命名,Cocoa有自己的惯例,所以我们在自己的类编写存取方法时,应该遵守这些惯例,这样我们和其他人读代码时才不会感到困惑。
setter方法根据它所更改的属性的名称来命名,并加上前缀。如:setEngine,setTire:getter方法则是以其返回的属性名称来命名。所以前面setter方法对应的getter方法命名为:engine,tireAtIndex,千万要记住,不要将get用作getter方法的前缀。
小提示:get这个词在Cocoa中有着特殊的含义。如果get出现在Cocoa的方法名称中,就意味着这个方法将你传递的参数作为指针来返回数值。所以,如果你在存取方法的名称中使用了get,那么,有经验的Cocoa编程人员就会习惯性地将指针当做参数传入这个方法,当他们发现这不过是一个简单的存取方法就会感到困惑。最好不要让其他编程人员被你的代码搞得一头雾水。我们要记住,Objective-C中所有对象间的交互都是通过指针实现的。
现在各位读者们可以再次阅读上面的代码,可以仔细品味一下。
下面来看看博主摘抄的程序代码例子:
#import <Foundation/Foundation.h> @interface Tire : NSObject @end @implementation Tire -(NSString *)description { return (@"I am a tire.I last a while"); } @end @interface Engine : NSObject @end @implementation Engine -(NSString *)description { return (@"I am an engine.Vrooom!"); } @end @interface Car : NSObject { Engine *engine; Tire *tires[4]; } //Engine类的getter方法 -(Engine *)engine; //Engine类的setter方法 -(void)setEngine:(Engine *)newEngine; //Tire类的getter方法 -(Tire *)tireAtIndex:(int)index; //Tire类的setter方法 -(void)setTire:(Tire *)tire atIndex:(int)index; -(void)print; @end @implementation Car -(Engine *)engine { return (engine); } -(void)setEngine:(Engine *)newEngine { engine = newEngine; } -(Tire *)tireAtIndex:(int)index { if(index < 0 || index > 3) { NSLog(@"bad index (%d) in tireAtIndex:",index); exit(1); } return (tires[index]); } -(void)setTire:(Tire *)tire atIndex:(int)index { if(index < 0 || index > 3) { NSLog(@"bad index (%d) in setTire:atIndex:",index); exit(1); } tires[index] = tire; } -(void)print { NSLog(@"%@",engine); NSLog(@"%@",tires[0]); NSLog(@"%@",tires[1]); NSLog(@"%@",tires[2]); NSLog(@"%@",tires[3]); } @end int main(int argc, const char * argv[]) { Car *car = [Car new]; Engine *engine = [Engine new]; [car setEngine:engine]; for(int i = 0;i < 4;i++) { Tire *tire = [Tire new]; [car setTire:tire atIndex:i]; } [car print]; return 0; }
我们编写程序使用存取方法时,setter方法和getter一般是成对使用的,但也有单个使用的情况。setter方法用来设置属性的值,getter方法用来读取属性的值。可以使用setter方法来设置密码,使用getter获取文件大小等等。
对于存取方法的命名,Cocoa有自己的惯例,所以我们在自己的类编写存取方法时,应该遵守这些惯例,这样我们和其他人读代码时才不会感到困惑。
setter方法根据它所更改的属性的名称来命名,并加上前缀。如:setEngine,setTire:getter方法则是以其返回的属性名称来命名。所以前面setter方法对应的getter方法命名为:engine,tireAtIndex,千万要记住,不要将get用作getter方法的前缀。
小提示:get这个词在Cocoa中有着特殊的含义。如果get出现在Cocoa的方法名称中,就意味着这个方法将你传递的参数作为指针来返回数值。所以,如果你在存取方法的名称中使用了get,那么,有经验的Cocoa编程人员就会习惯性地将指针当做参数传入这个方法,当他们发现这不过是一个简单的存取方法就会感到困惑。最好不要让其他编程人员被你的代码搞得一头雾水。我们要记住,Objective-C中所有对象间的交互都是通过指针实现的。
现在各位读者们可以再次阅读上面的代码,可以仔细品味一下。
相关文章推荐
- 【值得收藏】线程、事件与QObject
- 推送(本地Local Notification)
- KVO探究
- python TypeError: 'str' object does not support item assignment”
- Object-C文件操作
- Objective-C继承
- Objective-C页面跳转方法总结
- 表单serializeObject问题
- 对Objective-C中runtime的理解
- fastjson包JSONObject.toJSON导致pojo对象部分属性丢失问题
- 浅析selenium的page object模式
- JDK1.6聚合框架bug:c.toArray might (incorrectly) not return Object[] (see 6260652)
- com.jacob.com.ComFailException: Can't co-create object解决办法
- WaitForSingleObject以及WaitForMultipleObjects 函数
- 《从零开始学Swift》学习笔记(Day 70)——Swift与Objective-C混合编程之Swift与Objective-C API映射
- Line: 209 - com/opensymphony/xwork2/spring/SpringObjectFactory.java:209:-1
- '-[__NSCFArray insertObject:atIndex:]: mutating method sent to immutable object'
- 使用ObjectAnimator开发打开、关闭书本动画
- Objective-C Runtime的数据类型
- buffer object,render buffer,framebuffer