属性声明(property declarations), 自定义属性,自动生成 get 和 set 方法,getter 和 setter

一、普通的get 和set 属性。

一般的get 和set 属性。就是在get 中返回一个变量的值,而在set 属性中给一个变量赋值,一般的我们也把他们称之为接口,用来访问类的私有(private)或者保护(protected)成员。

Circle.h文件
#import <Foundation/Foundation.h>
@interface Circle : NSObject{
    int radius;
    int x;
    int y;
}
-(int)getX;
-(int)getY;
-(int)getRadius;
-(void)setR:(int)_r andX:(int)_x andY:(int) _y;
-(void)setR:(int)_r;
-(void)setY:(int)_y;
-(void)print;
@end

Circle.m文件

#import <Foundation/Foundation.h>
#import "Circle.h"
@implementation Circle
@synthesize  radius,x;
@synthesize  y;
-(int)getX{
    return x;
}
-(int)getY{
    return y;
}
-(int)getRadius{
    return radius;
}
-(void)setR:(int)_r andX:(int)_x andY:(int) _y{
    radius=_r;
    x=_x;
    y=_y;
}
-(void)setR:(int)_r{
    radius=_r;
}
-(void)setY:(int)_y{
    y=_y;
}
-(void)print{
     NSLog(@"radius = %d ,x = %d , y = %d",[self getRadius],[self getX],[self getY]);
}
@end
二、自动生成 get 和 set 方法

自动生成 get 和 set 方法:使用关键字property 。格式:@property type  variablesName,...; 一次可以声明多个但是必须是同一种类型。这样在声明之后我们就可以使用 对象.变量名 的格式
来作为 get 和 set 方法,其中有右值得话就是set方法,没有右值就是get方法。
例如

Circle.h文件

#import <Foundation/Foundation.h>
@interface Circle : NSObject{
    int radius;
    int x;
    int y;
}
-(int)getX;
-(int)getY;
-(int)getRadius;
-(void)setR:(int)_r andX:(int)_x andY:(int) _y;
-(void)setR:(int)_r;
-(void)setY:(int)_y;
-(void)print;
//@property (nonatomic)int radius,x,y;  //nonatomic的意思是禁止多线程,保护变量,提高性能。
@property (nonatomic)int radius,x;
@property (getter = gy,setter = sy:)int y;
@end

Circle.m文件

#import <Foundation/Foundation.h>
#import "Circle.h"
@implementation Circle
@synthesize  radius,x;
@synthesize  y;
-(int)getX{
    return x;
}
-(int)getY{
    return y;
}
-(int)getRadius{
    return radius;
}
-(void)setR:(int)_r andX:(int)_x andY:(int) _y{
    radius=_r;
    x=_x;
    y=_y;
}
-(void)setR:(int)_r{
    radius=_r;
}
-(void)setY:(int)_y{
    y=_y;
}
-(void)print{
     NSLog(@"radius = %d ,x = %d , y = %d",self.radius,self.x,[self gy]);
}
@property (nonatomic)int radius,x,y;
@end

main.m文件

#import <Foundation/Foundation.h>
#import "Circle.h"
#import "Person.h"
 
int main (int argc, const char * argv[])
{
    @autoreleasepool {
       Circle* c=[[Circle alloc]init];
        [c setR:2 andX:3 andY:5];
        [c print];
        c.radius=10;
        c.x=10;
        c.y=10;
        [c print];
        NSLog(@"radius = %d ,x = %d , y = %d ",c.radius,c.x,c.y);
        NSLog(@"radius = %d ,x = %d , y = %d",c.radius,c.x,c.y);
        c.y=40;
        [c y:50];  

NSLog(@"y = %d",c.y);

    }
    return 0;
}
三、getter 和 setter 

getter 和 setter的作用是指定get 和set 属性的名字,给get 和set 属性重命名。在使用getter 和 setter 之后,就不可以继续使用系统自动生成的get 和 set 方法

Circle.h文件

#import <Foundation/Foundation.h>
 
@interface Circle : NSObject{
    int radius;
    int x;
    int y;
}
-(int)getX;
-(int)getY;
-(int)getRadius;
-(void)setR:(int)_r andX:(int)_x andY:(int) _y;
-(void)setR:(int)_r;
-(void)setY:(int)_y;
-(void)print;
//@property (nonatomic)int radius,x,y;
@property (nonatomic)int radius,x;
@property (getter = gy,setter = sy:)int y;
@end
Circle.m文件
#import <Foundation/Foundation.h>
#import "Circle.h"
@implementation Circle
@synthesize  radius,x;
@synthesize  y;
-(int)getX{
    return x;
}
-(int)getY{
    return y;
}
-(int)getRadius{
    return radius;
}
-(void)setR:(int)_r andX:(int)_x andY:(int) _y{
    radius=_r;
    x=_x;
    y=_y;
}
-(void)setR:(int)_r{
    radius=_r;
}
-(void)setY:(int)_y{
    y=_y;
}
-(void)print{
     NSLog(@"radius = %d ,x = %d , y = %d",self.radius,self.x,[self gy]);
}
@end

main.m文件  主函数调用

#import <Foundation/Foundation.h>
#import "Circle.h"
#import "Person.h"
 
int main (int argc, const char * argv[])
{
    @autoreleasepool {
        Circle* c=[[Circle alloc]init];
        [c setR:2 andX:3 andY:5];
        [c print];
        c.radius=10;
        c.x=10;
        c.y=10;
        [c print];
        NSLog(@"radius = %d ,x = %d , y = %d ",c.radius,c.x,c.y);
        [c sy:30];
        NSLog(@"radius = %d ,x = %d , y = %d",c.radius,c.x,c.y);
        c.y=40;
        NSLog(@"y= %d",[c gy]);
        NSLog(@"y= %d",c.gy);
        NSLog(@"y= %d",c.getX);  
    }
    return 0;
}

属性声明(property declarations), 自定义属性,自动生成 get 和 set 方法,getter 和 setter的更多相关文章

  1. Eclipse用法和技巧六:自动生成get和set方法1

    java的类中,除了常量声明为静态且公有的,一般的对象数据作用域,都是声明为私有的.这样做能保护对象的属性不会被随意改变,调试的时候也会方便很多:在类的公有方法中大一个调用栈就能看到哪里改了属性值.声 ...

  2. Eclipse用法和技巧七:自动生成get和set方法2

    上一篇文章中我们介绍了自动批量生成get和set函数的方法.这个方法一般在声明完类的数据域之后使用,比较方便快捷.这里再补充几个自动生成get和set函数的方法. 步骤一:在声明的数据域中按Ctrl+ ...

  3. python--selenium实用的自动生成测试HTML报告方法--HTMLTestRunner

    python--selenium实用的自动生成测试HTML报告方法--HTMLTestRunner 下面给大家介绍下用HTMLTestRunner模块自动生成测试报告的方法. 一.首先我们导入unit ...

  4. 第7.26节 Python中的@property装饰器定义属性访问方法getter、setter、deleter 详解

    第7.26节 Python中的@property装饰器定义属性访问方法getter.setter.deleter 详解 一.    引言 Python中的装饰器在前面接触过,老猿还没有深入展开介绍装饰 ...

  5. wpf 通过为DataGrid所绑定的数据源类型的属性设置Attribute改变DataGrid自动生成列的顺序

    环境Win10 VS2019 .Net Framework4.8 在wpf中,如果为一个DataGrid绑定到一个数据源,默认情况下DataGrid会为数据源类型的每个属性生成一个列(Column)对 ...

  6. Eclipse用法:自动生成get和set方法

      方法一 Java的类中,除了常量声明为静态且公有的,一般的对象数据作用域,都是声明为私有的.这样做能保护对象的属性不会被随意改变,调试的时候也会方便很多:在类的公有方法中大一个调用栈就能看到哪里改 ...

  7. 自动生成get,set方法

    引发的问题: Action中有一个属性名字叫private boolean isHideNumber 用struts2的<s:if test ="isHideNumber"& ...

  8. (jdbc)取得数据库自动生成的主键方法

    一些类,在前面的博客中有,就不重复了 public class Test2 { TestDAO t=new TestDAO(); /*前提是数据表的主键是自动增加的, *取得数据库自动生成的主键 * ...

  9. Eclipse,IDEA自动生成相应对象接收方法返回值的快捷键

    @Service public class ItemServiceImpl implements ItemService { @Autowired private TbItemMapper itemM ...

  10. JavaBean自动生成get和set方法

    用Myeclipse开发java web程序,写javabean的时候,如果字段很多的话,写get和set方法是一件很无语和浪费时间的事情,所以Myeclipse提供了一个自动生成这些方法的功能.   ...

随机推荐

  1. 第二百六十三天 how can I 坚持

    今天解脱了,放下了,小罗娜,不给力,话说下一步该咋办呢. 鱼不想过双十一自杀了.这都二十二号了,好快. 该把给罗娜说的那些话保存下来.可惜已经删了. 不知道做的对不对,反正就是没缘分,就这样吧. 睡觉 ...

  2. oracle 的rowid和rownum

    rowid就是唯一标志记录物理位置的一个id,对于rownum来说它是oracle系统顺序分配为从查询返回的行的编号,返回的第一行分配的是1,第二行是2,依此类推,这个伪字段可以用于限制查询返回的总行 ...

  3. HDU 5768 Lucky7 (中国剩余定理+容斥)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5768 给你n个同余方程组,然后给你l,r,问你l,r中有多少数%7=0且%ai != bi. 比较明显 ...

  4. 数据持久化之sharedpreference的使用

    要将数据持久化到手机移动设备有多种方法,其中有一种是通过sharedpreference来实现. 首先将sharedpreference初始, private SharedPreferences sp ...

  5. matlab中读取txt数据文件(转)

    根据txt文档不同种类介绍不同的读取数据方法 一.纯数据文件(没有字母和中文,纯数字) 对于这种txt文档,从matalb中读取就简单多了 例如test.txt文件,内容为“17.901 -1.111 ...

  6. hibernate之saveorupdate()、save()、update()都有什么区别

    saveorupdate()如果传入的对象在数据库中有就做update操作,如果没有就做save操作. save()在数据库中生成一条记录,如果数据库中有,会报错说有重复的记录. update()就是 ...

  7. Python3学习

    要做一个儿童搜索引擎的项目(www.kidsearch.cn),所以开始接触各种新的语言,初步学了PHP爬虫,觉得要做大点的项目用PHP确实不太方便,中文兼容性就是一个比较棘手的问题.python的爬 ...

  8. Java模拟登陆02【转载】

    在使用java访问URL时,如果该URL需要身份验证,那么就不能够直接访问,因为没有登陆.那么,如何解决这个问题呢?     方法是使用java模拟登陆,登陆后记录下cookie信息,在下次发起请求时 ...

  9. codeforces GYM 100114 J. Computer Network tarjan 树的直径 缩点

    J. Computer Network Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100114 Des ...

  10. AES加密算法(C++实现,附源代码)

    先搞定AES算法,基本变换包含SubBytes(字节替代).ShiftRows(行移位).MixColumns(列混淆).AddRoundKey(轮密钥加) 其算法一般描写叙述为 明文及密钥的组织排列 ...