今天主要学习的setter和getter的使用方法, 按照昨天所学习的内容,首先我们要创建一个工程,另外在创建一个Person类!

=================================================================

在Person.h中 创建Person类中的几个实例变量, 声明setter和getter方法    "上代码"敢问代码是谁!

#import <Foundation/Foundation.h>

/*

实例变量可见度

1.@Public 公共可见度: 在类的内部和外部都可以进行访问,因为外部也可以访问,所以他破坏了类的封装特性.

2.@Private私有可见度: 只有当前类才可以访问,子类也无法访问,由于子类也无法访问,所以破坏了类的继承特性.

3.@Protected受保护可见度:当前类以及子类可以访问.(是默认的)也是最适合用的!

*/

@interface Person : NSObject

{

//定义Person类的实例变量

NSString *_name;//名字 属于字符串,所以用NSString 并且要带*

NSString *_sex; //性别 属于字符串,所以用NSString 并且要带*

NSInteger _age; //年龄 属于常量,所以用int类型,NSInteger是OC中表示常量的,不需要带*

CGFloat _weight;//体重 数据常量,CGFload相当于fload,所以不需要带*

}

//初始化方法

- (id)init;

//自定义初始化方法 形式: initWith + 接口部分的各个参数 例如:

- (id)initWtihName:(NSString *)name

sex:(NSString *)sex

age:(NSInteger)age   //参数类型不带*

weight:(CGFloat)weight; //参数类型不带*

//方法声明  打招呼

- (void)sayHi;

//对各个实例变量"统一"设置setter方法

//setter方法的格式 以set卡头 + 实例变量(去掉下划线,并且首字母大写):(参数类型NSString)参数名

- (void)setName:(NSString *)name sex:(NSString *)sex age:(NSInteger)age weight:(CGFloat)weight;

//对各个实例变量"分开"设置setter方法

- (void)setName:(NSString *)name;

- (void)setSex:(NSString *)sex;

- (void)setAge:(NSInteger)age;

//(返回值)set(参数名)(参数类型)(参数名)

- (void)setWeight:(CGFloat)weight;

//对各个设置好setter方法的实例变量, 分别设置getter方法

//getter格式:返回值为对应实例变量的类型,方法名为实例变量名去掉下划线

- (NSString *)name;

- (NSString *)sex;

- (NSInteger)age;

- (CGFloat)weight;

/* 最好把setter和getter方法写在一起例如:

- (void)setName:(NSString *)name;

- (NSString *)name;

*/

@end

=================================================================

在Person.m文件中, 实现init方法 实现setter和getter的方法   "上代码" 敢问代码是谁!

#import "Person.h"  //此处不要误解是在Person.h中, 这里就是Person.m文件

@implementation Person

//初始化 对每个实例进行初始的赋值

- (id)init

{

_name = @"Jack";

_sex = @"male";

_age = 30; //常量类型,所以不要用@"30"

_weight = 160; //与age同理

return self;

}

//调用父类系统初始化的过程

- (id)initWtihName:(NSString *)name sex:(NSString *)sex age:(NSInteger)age weight:(CGFloat)weight

{

self = [super init];//调用父类的方法

if (self) { //如果调用了父类的方法

_name = name; // _name是最上面init中的参数, name是initWithName后面的name

_sex = sex;   // 当在main函数中name传入新值的时候,_name就等于新的名字.

_age = age;

_weight = weight;

}

return self;

}

//========setter(赋值)和getter(取值)方法的实现========//

//方法的实现

- (void)sayHi

{

NSLog(@"人都拥有打招呼的功能");//此处是对Person.h中声明的方法进行具体的实现!

}

//对各个实例变量"统一"实现setter(赋值)方法

//对各个实例变量"统一"实现getter(取值)方法

- (void)setName:(NSString *)name sex:(NSString *)sex age:(NSInteger)age weight:(CGFloat)weight

{

_name = name;

_sex = sex;

_age = age;

_weight = weight;

}

//对各个实例变量"分别"实现setter(赋值)方法

//注:每个方法的实现都是与Person.h中声明的都是一一对应的亲!

- (void)setName:(NSString *)name

{

_name = name;//将传入进来的name的值赋给_name;可能有点绕,要仔细想想.

}

- (void)setSex:(NSString *)sex

{

_sex = sex;

}

-(void)setAge:(NSInteger)age

{

_age = age;

}

- (void)setWeight:(CGFloat)weight

{

_weight = weight;

}

//对各个实例变量"分别"实现getter(取值)方法

//注:每个方法的实现都是与Person.h中声明的都是一一对应的亲!

- (NSString *)name //name的getter方法实现

{

return _name;

//return回去的是最上面init中的_name 下面的方法同理.

}

- (NSString *)sex //sex的getter方法实现

{

return _sex;

}

- (NSInteger)age  //age的getter方法实现

{

return _age;

}

-(CGFloat)weight  //weight的getter方法实现

{

return _weight;

}

//建议书写格式: 可以采用setter和getter方法写在一块的方式

/*

- (void)setName:(NSString *)name

{

_name = name;

}

-(NSString *)name

{

return self;

}

*/

@end

=================================================================

在Main函数中,导入Person.h文件, 创建Person类的对象,并且对对象进行赋值,取值     "上代码" 敢问代码是谁!

#import <Foundation/Foundation.h>

#import "Person.h"

int main(int argc, const char * argv[])

{

//创建一个Person的对象

Person *per = [[Person alloc] init];

//给Person的对象per赋值名字

[per setName:@"Henry"];

//给对象per赋值性别

[per setSex:@"male"];

//给对象per赋值年龄

[per setAge:30];

//给对象per赋值体重

[per setWeight:160];

//NSLog(@"per的名字是:%@",per);    此时打印per只是打印一个地址, 要给per对象一个指定的打印的实例.

//如果此时,打印的结果是:    per的名字是:<Person: 0x100201e10>

NSLog(@"per的名字:%@ 性别:%@ 年龄:%ld 体重:%.2f",[per name],[per sex],[per age],[per weight]);

//打印结果:per的名字:Henry 性别:male 年龄:30 体重:160.00

//为对象per重新赋值

[per setName:@"Lily" sex:@"female" age:22 weight:96];

NSLog(@"per的名字:%@ 性别:%@ 年龄:%ld 体重:%.2f",[per name],[per sex],[per age],[per weight]);

//打印结果:per的名字:Lily 性别:female 年龄:22 体重:96.00

//per来调用Person类的方法

[per sayHi];

return 0;

}

好了,OC第二个课程学完了, 我也不知道是否会有人看我写的博客, 如果有看到这些的朋友,能够给与一些建议, 因为我也是初学者, 大家互相激励.

今天时间还算早,我在去学习下一章的内容

转载于:https://www.cnblogs.com/why2wm/p/4411170.html

Objective-C setter和getter相关推荐

  1. java类的对象无参与有参_java无参与有参以及setter和getter方法(了解)

    第一题:分析以下需求,并用代码实现 手机类Phone 属性: 品牌brand 价格price 行为: 打电话call() 发短信sendMessage() 玩游戏playGame() 要求: 1.按照 ...

  2. 【Groovy】Groovy 方法调用 ( Java 类成员及 setter 和 getter 方法设置 | Groovy 类自动生成成员的 getter 和 setter 方法 )

    文章目录 一.Java 类成员及 setter 和 getter 方法设置 二.Groovy 类自动生成成员的 getter 和 setter 方法 一.Java 类成员及 setter 和 gett ...

  3. 玩转Eclipse — 自动生成setter和getter方法

    我们在程序开发过程中,往往要编写这样的类:类的部分或者全部属性不希望让外部世界直接访问,而不用public字段修饰.这样,方法调用成了访问这些属性的唯一途径.JavaBean就是一个很好的例子,其严格 ...

  4. 使用Java :: Geci生成setter和getter

    在本文中 ,我们创建了非常简单的hello-world生成器,以介绍框架以及通常如何生成生成器. 在本文中,我们将研究访问器生成器,它是在Java :: Geci的核心模块中定义的,它是商业级的,而不 ...

  5. 计算属性的setter和getter

    computed的属性不仅可以写一个get方法,通过其他的值算出一个新值:同时,也可以设置set方法,通过设置一个值,来改变他相关联的值!而改变了相关联的值之后,又会引起fullName的重新计算,页 ...

  6. Python | 在属性的帮助下实现setter和getter

    In this program, we are implementing Properties. Python offers a better way to implement setters and ...

  7. java setter与getter方法

    //下面代码实现设置和获取学生姓名和成绩.2 class lesson5homework 3 {4 public static void main(String[] args) 5 {6 TestCo ...

  8. 初识 Vue(10)---(计算属性的 setter 和 getter)

    计算属性的 setter 和 getter 方法一: <!DOCTYPE html> <html lang="en"> <head><me ...

  9. java中封装类Feild和使用setter和getter方法访问封装的类Feild

    class Person {private String name;private int age;public void setName(String name) //定义访问name的方法{if ...

最新文章

  1. Androidx FloatingActionButton 中间图片颜色值修改
  2. “从客户端中检测到有潜在危险的 Request.Form 值“的解决方案汇总
  3. 为什么要强制弃坑Fastjson而主推Jackson?
  4. 【模拟】P1424 小鱼的航程(改进版)
  5. springboot 读取bootStrap.properties流程
  6. 163相册密码破解 - 简单版
  7. pygame和python的区别_用Python和Pygame写游戏-从入门到精通(22)
  8. OSChina 周三乱弹 —— 公司里的潜规则
  9. 电力技术监督导则_会议报道:2019年电力行业燃煤发电企业节能监督管理专业技术人员及燃煤发电机组能效水平对标管理办法培训班...
  10. TCP 的 keeplive保活机制
  11. 脑电EEG代码开源分享 【5.特征选择】
  12. PostgreSQL与mysql语法不同
  13. 查看tomcat端口号
  14. 电脑用户计算机名文件夹,电脑用户名文件夹名称更改
  15. Module containing this breakpoint has not yet loaded or the breakpoint address not be obtained
  16. GridView分页 记录总数:15 总页数:2 当前页:1 首页 上一页 下一页 尾页 GO
  17. winscp连接linux时提示连接失败OOPS:cannot change directory:/home/....什么的原因以及解决方案
  18. tcl 950 android 7,TCL 950测评:商务旗舰手机界的一股清流
  19. 部件MSCOMCTL.OCX或其附件之一不能正确注册:一个文件丢失或无效
  20. Aloha和时隙Aloha介绍与分析

热门文章

  1. 一位资深程序员的成长故事
  2. 大数据最核心的关键技术——32个算法,记得收藏!
  3. Java Bag模型模拟
  4. Tcp Keepalive和HTTP Keepalive详解
  5. 事件处理之一:两种方式:监听器与回调
  6. Spark Streaming 实战案例(五) Spark Streaming与Kafka
  7. google四件套之Dagger2
  8. Git Gitlab 使用指南之TortoiseGit
  9. windows和linux互传文件,用户配置文件和密码配置文件,用户和组管理
  10. java和js获取当前天之后或之前7天(任意)日期