属性声明(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. 【转】Nginx系列(四)--工作原理

    原博文出于:    http://blog.csdn.net/liutengteng130/article/details/46724081  感谢! 上篇文章介绍了Nginx框架的设计之管理进程以及 ...

  2. Qt 自动搜索串口号列表

    @功能: SerialPortList 类实现当前可用的串口进行实时扫描,当发现有新的串口 或是现有串口消失时,SerialPortList类将发出一个QStringList类型的 信号onNewSe ...

  3. Codeforces Round #260 (Div. 1) A. Boredom (简单dp)

    题目链接:http://codeforces.com/problemset/problem/455/A 给你n个数,要是其中取一个大小为x的数,那x+1和x-1都不能取了,问你最后取完最大的和是多少. ...

  4. main函数是个什么东西

    习惯的main函数有无参和两个参数的版本,那么main函数只能这么写吗? 好奇写了一个bug版本的main,结果是呵呵         #include <iostream>        ...

  5. Ecshop实现注册页面手机号唯一的验证

    前天,公司总监提了一个需求,实现我公司商城注册会员用手机号登录这个功能,那么这个功能容易修改,在我的前一篇博文中已经给出处理方法了,但是这里有一个问题,就是如果实现了用手机号码来登陆,那么就需要在注册 ...

  6. php 基本符号

    用这么久了,竟然PHP的基本符号都没有认全,看到@号还查了半天才知道什么意思.把基本符号列表帖一下吧,需要的朋友可以参考~ 注解符号:          // 单行注解              /* ...

  7. 使用 Tomcat 7 新的连接池 —— Tomcat jdbc pool

    Tomcat 在 7.0 以前的版本都是使用 commons-dbcp 做为连接池的实现,但是 dbcp 饱受诟病,原因有: dbcp 是单线程的,为了保证线程安全会锁整个连接池 dbcp 性能不佳 ...

  8. Hadoop on Mac with IntelliJ IDEA - 3 解决MRUnit - No applicable class implementing Serialization问题

    本文讲述在IntelliJ IDEA中使用MRUnit 1.0.0测试Mapper派生类时因MapDriver.withInput(final K1 key, final V1 val)的key参数被 ...

  9. PostgreSQL的 initdb 源代码分析之二十二

    继续分析 load_plpgsql(); 展开: 就是让postgres 执行 create extension plpgsql cmd是: "/home/pgsql/project/bin ...

  10. IIS应用程序池性能分析

    #查看应用程序池和w3wp.exe进程的对应关系iisapp -a C:\windows\system32\inetsrv\appcmd.exe list wp 查看任务管理器: 在性能计数器中找到对 ...