不知道从什么时候开始,我们的面向对象编程规范已经不希望我们直接访问实例对象,而是通过get,set方法。在Java里面,比如有一个属性name,那么,一般会把这个属性设置为private的,然后通过getName,setName来访问和修改name。
在obC里面,我似乎看到了更加优雅的实现。
1.在接口里面通过@property来设定需要实现get,set方法的实例
2.在实现文件中通过@synthesize来实现接口中的注解
3.在使用中直接通过[对象.属性]的方式访问和修改属性。
以下是例子:
Fraction.h
//
// Fraction.m
// first
//
// Created by coding on 12-2-19.
// Copyright (c) 2012年 __MyCompanyName__. All rights reserved.
//
#import "Fraction.h"
@implementation Fraction
//实现get,set方法
@synthesize numerator,denominator;
-(void) print
{
NSLog(@"%i/%i",numerator,denominator);
}
-(void) set:(int)_numerator :(int)_denominator
{
numerator = _numerator;
denominator = _denominator;
}
@end
Fraction.m
//
// Fraction.m
// first
//
// Created by coding on 12-2-19.
// Copyright (c) 2012年 __MyCompanyName__. All rights reserved.
//
#import "Fraction.h"
@implementation Fraction
//实现get,set方法
@synthesize numerator,denominator;
-(void) print
{
NSLog(@"%i/%i",numerator,denominator);
}
-(void) set:(int)_numerator :(int)_denominator
{
numerator = _numerator;
denominator = _denominator;
}
@end
调用类:
//
// main.m
// first
//
// Created by coding on 12-2-19.
// Copyright (c) 2012年 __MyCompanyName__. All rights reserved.
//
#import <Foundation/Foundation.h>
#include "Fraction.h"
int main (int argc, const char * argv[])
{
@autoreleasepool {
Fraction *myFraction;
myFraction = [Fraction new];
myFraction.numerator = 1;
myFraction.denominator =3;
[myFraction print];
[myFraction set:1 :3];
[myFraction print];
}
return 0;
}
//方法的调用语法:[ClassOrInstance method];
注意里面有一个多参数的方法。