OC设置器与访问器以及自定义初始化方法

1.Person.h

#import <Foundation/Foundation.h>

@interface Person : NSObject

{

NSString * _name;

NSString * _sex;

NSInteger  _age;

CGFloat    _weight;

CGFloat    _height;

}

- (void)sayhi;

//设置器   专门给一个实例变量赋值的方法

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

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

- (void)setAge:(NSInteger)age;

- (void)setWeight:(CGFloat)weight;

- (void)setHeight:(CGFloat)height;

//访问器  用来得到一个实例变量内容的方法

- (NSString *)name;

- (NSString *)sex;

- (NSInteger)age;

- (CGFloat)weight;

- (CGFloat)height;

//确定一个方法的方法名

//去掉加减号,去掉返回值类型,去掉形参类型和形参名,剩下的拼在一起就是这个方法的方法名

//OC中没有方法重载的只要方法名一样,就认为是同一个方法,不允许重复定义

+ (void)testMethd;

- (void)changName:(NSString *)name

sex:(NSString *)sex

age:(NSInteger)age

weight:(CGFloat)weight

height:(CGFloat)height;

- (void)modifyName:(NSString*)name

sex:(NSString *)sex

age:(NSInteger)age

weight:(CGFloat)weight

height:(CGFloat)height;

//自定义的初始化方法

//初始化方法都是-号方法,返回值是id,方法名以intwith打头

//自定义初始化方法的作用,创建对象的同时给某些实力变量赋初值

//一个类可以对外提供很多个初始化方法,使用的时候从众多初始化方法中挑一个使用,初始化方法在对象的生命周期里只使用一次,创建对象的同时使用初始化方法给某些实例变量赋初值.

- (id)initwithName:(NSString *)name;

- (id)initwithSex:(NSString *)sex;

- (id)initwithAge:(NSInteger)age;

- (id)initwithWeight:(CGFloat)weight;

- (id)initwithHeight:(CGFloat)height;

- (id)initwithName:(NSString *)name

sex:(NSString *)sex;

- (id)initwithName:(NSString *)name

age:(NSInteger)age;

- (id)initwithsex:(NSString *)sex

age:(NSInteger)age;

- (id)initwithweight:(CGFloat)weight

height:(CGFloat)height;

- (id)initwithName:(NSString *)name

sex:(NSString *)sex

age:(NSInteger)age;

- (id)initwithName:(NSString *)name

sex:(NSString *)sex

weight:(CGFloat)weight;

- (id)initwithName:(NSString *)name

sex:(NSString *)sex

age:(NSInteger)age

weight:(CGFloat)weight

height:(CGFloat)height;

@end

2.Person.m

#import "Person.h"

@implementation Person

- (id)init

{

_name = @"宝强";

_sex = @"男";

_age = 25;

_weight = 65;

_height = 166;

return self;

}

- (void)sayhi

{

NSLog(@"\n姓名%@,性别%@,年龄%ld,体重%.2f,身高%.2f",_name,_sex, _age,_weight,_height);

}

- (void)setName:(NSString *)name

{

_name = name;

}

- (void)setSex:(NSString *)sex

{

_sex = sex;

}

- (void)setAge:(NSInteger)age

{

_age = age;

}

- (void)setWeight:(CGFloat)weight

{

_weight = weight;

}

- (void)setHeight:(CGFloat)height

{

_height = height;

}

//访问器  用来得到一个实例变量内容的方法

- (NSString *)name

{

return _name;

}

- (NSString *)sex

{

return _sex;

}

- (NSInteger)age

{

return _age;

}

- (CGFloat)weight

{

return _weight;

}

- (CGFloat)height

{

return _height;

}

//+ 号方法,只能使用类名调用

//+ 号方法中不能使用实例变量,因为根本就没有创建对象,只有创建了对象才有内存存储实例变量

+ (void)testMethd

{

NSLog(@"hello ");

}

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

{

_name = name;

_sex = sex;

_age = age;

_weight = weight;

_height = height;

}

- (void)modifyName:(NSString*)name

sex:(NSString *)sex

age:(NSInteger)age

weight:(CGFloat)weight

height:(CGFloat)height

{

_name = name;

_sex = sex;

_age = age;

_weight = weight;

_height = height;

}

//自定义初始化方法

- (id)initwithName:(NSString *)name

{

_name = name;

return self;

}

- (id)initwithSex:(NSString *)sex

{

_sex = sex;

return self;

}

- (id)initwithAge:(NSInteger)age

{

_age = age;

return self;

}

- (id)initwithWeight:(CGFloat)weight

{

_weight = weight;

return self;

}

- (id)initwithHeight:(CGFloat)height

{

_height = height;

return self;

}

- (id)initwithName:(NSString *)name

sex:(NSString *)sex

{

_name = name;

_sex = sex;

return self;

}

- (id)initwithName:(NSString *)name

age:(NSInteger)age

{

_name = name;

_age = age;

return self;

}

- (id)initwithsex:(NSString *)sex

age:(NSInteger)age

{

_sex = sex;

_age = age;

return self;

}

- (id)initwithweight:(CGFloat)weight

height:(CGFloat)height

{

_weight = weight;

_height = height;

return self;

}

- (id)initwithName:(NSString *)name

sex:(NSString *)sex

age:(NSInteger)age

{

_name = name;

_sex = sex;

_age = age;

return self;

}

- (id)initwithName:(NSString *)name

sex:(NSString *)sex

weight:(CGFloat)weight

{

_name = name;

_sex = sex;

_weight = weight;

return self;

}

- (id)initwithName:(NSString *)name

sex:(NSString *)sex

age:(NSInteger)age

weight:(CGFloat)weight

height:(CGFloat)height

{

_name = name;

_sex = sex;

_age = age;

_weight = weight;

_height = height;

return self;

}

@end

3.main.m

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

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

[p sayhi];

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

[p1 setName:@"zhangsan"];//[p1 sayhi];

NSLog(@"%@",[p1 name]);

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

[p2 setName:@"zhaosi"];

[p2 setSex:@"男"];

[p2 setAge:20];

[p2 setWeight:120];

[p2 setHeight:178];

NSLog(@"%@,%@,%ld,%.2f斤,%.2fcm",[p2 name],[p2 sex], [p2 age],[p2 weight],[p2 height]);

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

[p3 changName:@"祖蓝" sex:@"男" age:30 weight:30 height:177];

NSLog(@"%@,%@,%ld,%.2f斤,%.2fcm",[p3 name],[p3 sex], [p3 age],[p3 weight],[p3 height]);

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

[p4 modifyName:@"李晨" sex:@"男" age:30 weight:30 height:177];

NSLog(@"%@,%@,%ld,%.2f斤,%.2fcm",[p4 name],[p4 sex], [p4 age],[p4 weight],[p4 height]);

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

[p5 sayhi];

// 自定义初始化方法

Person * p6 = [[Person alloc] initwithName:@"吴强"];

Person * p7 = [[Person alloc] initwithName:@"赵子龙"];

[p6 setName:@"关羽"];

[p6 sayhi];[p7 sayhi];

Person * p8 = [[Person alloc]initwithName:@"张飞" sex:@"男" age:30 weight:70 height:180];

[p8 sayhi];

return 0;

}

时间: 2024-10-10 00:35:35

OC设置器与访问器以及自定义初始化方法的相关文章

OC中实例变量可见度、setter、getter方法和自定义初始化方法

在对类和对象有一定了解之后,我们进一步探讨实例变量的可见度等相关知识 实例变量的可见度分为三种情况:public(共有),protected(受保护的,默认),private(私有的),具体的不同和特点如下: 具体的使用示例如下: 编程时默认的可见度是@protectde,为什么不使用@public呢? 因为OC是面向对象编程,使用@public关键字,暴漏了类内部的细节,从而不符合面向对象语言的三大特性之一——封装 实例变量经过@protectde修饰之后,我们就不能在该类和其子类外操作,例如

OC --(2)-- 基础知识分析对象,创建类,自定义初始化方法

1.分析对象 2 创建类(实例变量 方法) 3.创建对象 调用方法 结局问题 @property int age;//相当于声明getter setter 方法; @synthesize age ; //相当于实现getter setter 方法; @synthesize age=_age ;//会去访问_age; 实例变量的可见度;         [email protected]; 公共的 在类的内部和外部都可以进行访问(破坏了面向的对象的封装特性)         [email prot

OC中的类簇的使用和初始化方法中属性的使用

今天遇到了几个和字符串相关的内存问题,和大家分享一下 NSString *name = [[NSString alloc]initWithString:@"张三"];NSLog(@"%d",[name retainCount]); 这两行代码的打印结果是-1, NSString * aString = [[NSString alloc] initWithFormat:@"123"]; NSLog(@"%d",aString.r

setter设置器 gutter访问器

set方法书写规范: 1.必须以set开头,set后跟去掉下划线的实例变量并且首字母大写.ps: setAge:2.一定有参数3.不能有返回值4.一定是对象方法(-开头)5.形参一般是去掉下划线的实例变量6.形参类型和实例变量类型一致7.形参名一般不能喝成员变量名相同,如果相同则通过self访问成员变量8.在set方法中一定得给实例变量赋值 “函数内部可以定义和全局变量同名的变量如果同名,局部变量会暂屏蔽全局变量的作用域”

【学习ios之路:Object-C】设置器,访问器,自定义初始化和多参赋值

1.设置器和访问器的定义 *   给单一实例变量赋值的方法叫做设置器.(setter方法) *   给单一实例变量值的方法叫做访问器.(getter方法) 2.为什么用设置器(setter)和访问器(getter) * 实例变量的可见度有: 1).private:只有在本类文件中访问.即.h和.m文件,,访问方式:直接访问. 2).protected:在本类文件和子类文件中访问.访问方式:直接访问. 3).public: 在本类文件和子类文件及其它文件都可以访问. 访问方式:在本类及子类是直接访

C#访问器

属性的访问器包含与获取或设置属性有关的可执行语句.访问器声明可以包含 get 访问器或 set 访问器,或者两者均包含.声明采用下列形式之一:get {}set {} get 访问器get 访问器体与方法体相似.它必须返回属性类型的值.执行 get 访问器相当于读取字段的值.以下是返回私有字段 name 的值的 get 访问器: private string name; // the name field public string Name // the Name property { get

JavaScript数据属性与访问器属性

ES5中对象的属性可以分为‘数据属性’和‘访问器属性’两种. 数据属性一般用于存储数据数值,访问器属性对应的是set/get操作,不能直接存储数据值. 数据属性特性:value.writable.enumerable.configurable. 解释:configurable:true/false,是否可以通过delete删除属性,能否修改属性的特性,能否把属性修改为访问器属性,默认false: enumerable:true/false,是否可以通过for in循环返回,默认false: wr

C#属性访问器

属性的访问器包含与获取或设置属性有关的可执行语句.访问器声明可以包含 get 访问器或 set 访问器,或者两者均包含.声明采用下列形式之一:get {}set {} get 访问器get 访问器体与方法体相似.它必须返回属性类型的值.执行 get 访问器相当于读取字段的值.以下是返回私有字段 name 的值的 get 访问器: private string name;  // the name field public string Name  // the Name  property { 

js高级程序设计——数据属性和访问器属性

ES5中对象的属性可以分为"数据属性"和"访问器属性"两种. 数据属性一般用于存储数据数值,访问器属性对应的是set/get操作,不能直接存储数据值. 数据属性分为 configurable   enumerable writable value 解释:configurable: 表示能否通过delete删除属性重而重新定义属性,能否修改属性的特性,或者能否把属性修改为访问器属性. enumerable:表示能否通过for-in循环返回属性. writable:表示