ios-set和get方法

来源:互联网 发布:公司注册淘宝店铺流程 编辑:程序博客网 时间:2024/06/06 09:25

在OC的类中,我们如果在interface{}中定义了成员变量,如果我们想要在类外给他们赋值和获取他们的值,我们就需要给他们写set方法和get方法,否则会报错。如果成员变量名是age,对于set方法的格式要求是setAge,意思就是说set方法要以set开头后面的字符为变量的大写字母开头,get方法就是一般就是以变量名来命名。比如说

#import <Foundation/Foundation.h>@interface RectMno : NSObject{    @public NSInteger age;}@property (nonatomic,assign) int a;-(int)age;-(void)setAge:(int)age1;@end
#import "RectMno.h"@implementation RectMno-(void)setAge:(int)age1{    age=age1;}-(int)age{    return age;}@end
只有给这个成员变量定义了get方法和set方法才能得到它的值和获取它的值点运算符在oc的类对象中不能访问成员变量,如rect.age=5,这里不是使用成员变量age,而是调用成员方法setAge,相当于给rect.age赋值,调用方法[rect setAge:5]; NSLog(@" %d ", rect.age); 这里也不是使用成员变量age,而是调用成员方法age, 使用dog.age表达式的值时,实际上就是调用成员方法age,  [rect  age].  " . " 不能调用成员变量,只是调用set函数和get函数的一种简写。 这里不能理解为定义了get函数和get函数就能调用成员变量.

而我们如果定义了一个属性就会自动生成get方法和set方法。但是如果同时重写了这个属性的get方法和set方法就会报错,单独重写任何一个都不会报错。主要是因为当你复写了get和set方法之后@property默认生成的@synthesize就不会起作用了,这也就意味着你的类不会自动生成出来实例变量了,你就必须要自己声明实例变量,比如说你定义了一个属性

@property (nonatomic, copy) NSString *name;
则在interface{}中就要定义一个NSString *_name;,否则会报错。因为一旦同时重写了setter、getter方法,并且没有实现@synthesizer,@synthesizer就不再生成实例变量。

属性的作用是生成setter以及getter方法的实现,如果方法内部操作的实例变量未定义,系统会自动生成一个_属性名的实例变量,但是生成的实例变量的可见度是私有的,子类不可访问。

原创粉丝点击