当前位置: 移动技术网 > IT编程>移动开发>IOS > ios-set和get方法

ios-set和get方法

2018年09月13日  | 移动技术网IT编程  | 我要评论

000004e,锤子t3最新消息,未来青年第一季

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

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网