iOS 2 setter和getter

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

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

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

#import <Foundation/Foundation.h>

/*

实例变量可见度

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

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

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

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

时间: 2024-12-04 22:46:31

iOS 2 setter和getter的相关文章

【原】iOS 同时重写setter和getter时候报错:Use of undeclared identifier &#39;_name&#39;;did you mean &#39;name&#39;

写了那么多的代码了,平时也没有怎么注意会报这个错误,因为平时都很少同时重写setter和getter方法,一般的话,我们大概都是使用懒加载方法,然后重写getter方法,做一个非空判断.然后有时候根据需求,要同时重写属性的setter和getter方法.系统就会报错误::Use of undeclared identifier '_name';did you mean 'name' MARK:如果不想了解太多,直接的解决方法: 在@implementation 实现中添加一行代码就OK了 @sy

iOS开发核心语言Objective C —— 面向对象思维、setter和getter方法及点语法

本分享是面向有意向从事iOS开发的伙伴们.或者已经从事了iOS的开发人员.假设您对iOS开发有极高的兴趣,能够与我一起探讨iOS开发.一起学习,共同进步.假设您是零基础,建议您先翻阅我之前分享的iOS开发分分钟搞定C语言系列.然后在開始Objective C语言的学习,假设您遇到问题也能够与我探讨,另外将无偿分享自己整理的大概400G iOS学习视频及学习资料.都是干货哦.能够新浪微博私信?关注极客James.期待与您的共同学习和探讨.! 由于时间有限,每天在工作之余整理的学习分享.难免有不足之

Objective-C中的setter和getter使用

getter 和 setter 是对实例变量的一个设置和调用的作用 平时我们的实例变量都是@public的形式,这个形势的实例变量谁都可以去修改,跟我们现实中的某种职业一样. 这个时候就体现出封装的作用了,我定义的实例变量只能我让你用,你才能用.我让你怎么去用,你才能怎么取用. 怎么才能实现我的霸权注意呢? 这个时候@protected的作用的出来了.我给我的数据建立了一个笼子.如果你要用需要用我给你的钥匙才能进去用我的东西.这个就是getter ,如果我想让你怎么用,你才能怎么用的时候 这个就

Objective-C的setter和getter

一.setter和getter的一般写法 setter和getter器可以说是一个类最基本的东西,任何一门面向对象的语言,都又这个概念,C++.java等等.因为setter和getter是对面向对象语言封装的最基本的支持. 在Objective-C的setter和getter器,当然也和一般的语言没有什么不同.只不过,添加了一些自己的特性. 比如有一个实例变量: 先在.h文件中声明setter和getter器 @property (nonatomic,retain) int age; -(vo

OC基础(四)setter和getter方法

setter和getter方法整体声明和实现虽然后面可以用@property代替,但是在后面的iOS开发中,setter方法或getter方法单独使用的频率比较高,应用比较广泛! @Interface Person:NSObject { NSString *_name; int _age; Sex _sex;      //此处枚举类型,属于基本数据类型,不用加“*” float _height; } @end 一.setter方法就是给属性赋值的方法 书写格式: 1.在类的声明中:- (voi

如果将synthesize省略,语义特性声明为assign retain copy时,自己实现setter和getter方法

如果将synthesize省略,并且我们自己实现setter和getter方法时,系统就不会生成对应的setter和getter方法,还有实例变量 1,当把语义特性声明为assign时,setter和getter时方法内部实现 - (void)setName:(NSString *)name{ _name = name; } - (NSString *)name{ return _name; } 2,当把语义特性声明为retain时,setter和getter方法内部实现 - (void)set

setter 和 getter 高级 以及内存管理初级

setter 和 getter 的演变,紧接setter 和 getter 初级 [email protected] 和  @synthesize 这两个关键字的出现,就是为了剔除代码中的setter方法和getter方法 @property:可以自动生成某个成员变量的setter和getter声明 @property int age;//相当于下面这两句:- (void)setAge:(int)age;- (int)age; @synthesize自动生成age的setter和getter实现

关于setter 和 getter方法的一些总结(初级)

1.最基础的set 和 get 准备工作 Person.h @interface Person : NSObject { NSString *_hobby; // ObjC建议成员变量带"_" @protected // 受保护的 本类以及子类可以访问 NSString *_name; NSString *_gender; @private // 私有的 只有本类可以访问 NSInteger _age; NSInteger _weight; } #pragma mark --- 声明s

【Java基础】setter与getter方法

1 //下面代码实现设置和获取学生姓名和成绩. 2 class lesson5homework 3 { 4 public static void main(String[] args) 5 { 6 TestCode TC=new TestCode(); 7 TC.StudentTest();//调用测试类 8 } 9 } 10 class Student 11 //设置,获取student值及分别表明name和score值是否正确的Boolean类型的rn和rs 12 { 13 private