欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

ios-set和get方法

程序员文章站 2022-05-27 17:07:25
ios-set和get方法,在oc的类中,我们如果在interface{}中定义了成员变量,如果我们想要在类外给他们赋值和获取他们的值,我们就需要给他们写set方法和get方法,否则会报错。如果成员...

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

#import 

@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方法的实现,如果方法内部操作的实例变量未定义,会自动生成一个_属性名的实例变量,但是生成的实例变量的可见度是私有的,子类不可访问。