ios-set和get方法
程序员文章站
2023-02-20 08:09:40
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方法的实现,如果方法内部操作的实例变量未定义,会自动生成一个_属性名的实例变量,但是生成的实例变量的可见度是私有的,子类不可访问。
推荐阅读
-
JavaScript中的call方法和apply方法使用对比
-
程序员 - PHP时间问题,2014-1-21 和 2013-5-13 请用最有效率的方法计算出两个时间相差的年份和月份??
-
WPF 框架开发 调试和开发 XAML 构建过程的 PresentationBuildTasks 方法
-
浅析ThinkPHP中execute和query方法的区别_PHP教程
-
PHP 数组和字符串互相转换实现方法
-
Ubuntu 8.10系统JAVA和MYSQL配置方法
-
PHP static 静态变量和属性方法使用说明
-
IE6通过get发送奇数个汉字请求会乱码的解决方法_PHP教程
-
PHP cURL初始化和执行方法入门级代码,curl初始化
-
IDEA中如何自定义类的注释和方法的注释