oc实例变量初始化方法
1 使用实例setter方法 默认初始化方法 + setName:xxx setAge:xxx
3 使用实例初始化方法 initWith开头的方法
4 使用构造器 类名+With…
以Person Student两个类为例
1 使用实例 setter方法
这是最麻烦的方法
- @interface Person : NSObject
- {
- NSString *_name;
- NSString *_sex;
- int _age;
- }
- //setter方法
- -(void)setName:(NSString *)name;
- -(void)setSex:(NSString *)sex;
- -(void)setAge:(int)age;
- @end
- @implementation Person
- //setter方法
- -(void)setName:(NSString *)name
- {
- _name = name;
- }
- -(void)setSex:(NSString *)sex
- {
- _sex = sex;
- }
- -(void)setAge:(int)age
- {
- _age = age;
- }
- @end
- @interface Student : Person
- {
- NSString *_studentID;
- float _score;
- }
- //setter
- -(void)setStudentID:(NSString *)studentID;
- -(void)setScore:(float)score;
- @end
- @implementation Student : Person
- //setter
- -(void)setStudentID:(NSString *)studentID
- {
- _studentID = studentID;
- }
- -(void)setScore:(float)score
- {
- _score = score;
- }
- @end
- int main()
- {
- Student *stu = [[Student alloc]init];//开辟空间调用初始化方法
- //使用setter方法为实例变量赋值。
- [stu setName:@"xiaoA"];
- [stu setSex:@"Man"];
- [stu setAge:15];
- [stu setStudentID:@"2008-07"];
- [stu setScore:96];
- return 0;
- }
2 使用实例功能类方法赋值
简单于setter方法
- @interface Person : NSObject
- {
- NSString *_name;
- NSString *_sex;
- int _age;
- }
- -(void)setName:(NSString *)name sex:(NSString *)sex age:(int)age;
- @end
- @implementation Person
- -(void)setName:(NSString *)name sex:(NSString *)sex age:(int)age
- {
- _name = name;
- _sex = sex;
- _age = age;
- }
- @end
- @interface Student : Person
- {
- NSString *_studentID;
- float _score;
- }
- -(void)setStudentID:(NSString *)studentID score:(float)score;
- @end
- @implementation Student : Person
- -(void)setStudentID:(NSString *)studentID score:(float)score
- {
- _studentID = studentID;
- _score = score;
- }
- @end
- int main()
- {
- Student *stu = [[Student alloc]init];//开辟空间调用初始化方法
- //使用setter方法为实例变量赋值。
- [stu setName:@"xiaoA" sex:@"Man" age:15];
- [stu setStudentID:@"2008-02" score:97];
- return 0;
- }
3 使用实例初始化方法 initWith开头的方法
这是一种比较常用的方法
- @interface Person : NSObject
- {
- NSString *_name;
- NSString *_sex;
- int _age;
- }
- -(void)initWithName:(NSString *)name sex:(NSString *)sex age:(int)age;
- @end
- @implementation Person
- -(void)initWithName:(NSString *)name sex:(NSString *)sex age:(int)age
- {
- self = [super init];
- if(self)
- {
- _name = name;
- _sex = sex;
- _age = age;
- }
- return self;
- }
- @end
- @interface Student : Person
- {
- NSString *_studentID;
- float _score;
- }
- -(void)initWithName:(NSString *)name sex:(NSString *)sex age:(int)age studentID:(NSString *)studentID score:(float)score;
- @end
- @implementation Student : Person
- -(void)initWithName:(NSString *)name sex:(NSString *)sex age:(int)age studentID:(NSString *)studentID score:(float)score
- {
- self = [super initWithName:name sex:sex age:age];
- if(self)
- {
- _studentID = studentID;
- _score = score;
- }
- return self;
- }
- @end
- int main()
- {
- Student *stu = [[Student alloc]initWithName:@"xiaoA" sex:@"Man" age:15 studentID:@"2008-2" score:97];//开辟空间调用初始化方法
- return 0;
- }
这种赋值方法有几点需要注意:
1) 自写初始化函数需要 以 initWith开头 必须形如 initWith…注意大小写
2 )一个类里可以有多个初始化方法,但是只能有一个“指定初始化”方法,指定初始化方法是在调用任意一个初始化方法的时候都会默认被调用的初始化方法,也就是说 指定初始化方法是在其它初始化方法里面被调用的,每一个初始化方法内部必须调用指定初始化方法,这不是规则,而是通用的原则。
如 上例做如下修改:
添加一个初始化方法:
h文件声明:
-(void)initWithStudentID:(NSString *)studentID score:(float)score;
m文件实现:
-(void)initWithStudentID:(NSString *)studentID score:(float)score
{
self = [self initWithName:NIL sex:NIL age:NIL studentID:studentID score: score
}
3 )注意继承的初始化的写法
4) self类似与其它语言的this指针,指向当前的对象,如果在方法里面类调用 就指代当前类,对象调用就指代当前对象
4 便利构造器方法
便利构造器书写规则
类方法 开头以类名开头类名首字母小写 后续驼峰法,属于类方法 用+号
如上例定义便利构造器
+(void)studentWithName:(NSString *)name sex:(NSString *)sex age:(int)age studentID:(NSString *)studentID score:(float)score
{
Student *stu = [[self alloc]studentWithName:name sex:sex age:age studentID:studentID score:score];
}
此时,创建对象的方法就变成了
int main
{
Student *stu = [Student studentWithName:@"xiaoA" sex:@"Man" age:16 studentID:@"2008-02" score:97]
return 0;
}
这种方法创建对象就很便捷了,因为无需每次手动申请空间,调用alloc函数。
一个初始化函数里面只能有一个super init类的方法,这样能保证多个入口一个出口,避免混乱。
oc实例变量初始化方法的更多相关文章
- Java实例变量初始化
由一道面试题所想到的--Java实例变量初始化 时间:2015-10-07 16:08:38 阅读:23 评论:0 收藏:0 [点我收藏+] 标签:java ...
- Java 类的实例变量初始化的过程 静态块、非静态块、构造函数的加载顺序
先看一道Java面试题: public class Baset { private String baseName = "base"; // 构造方法 public Baset() ...
- 第8.12节 Python类中使用__dict__定义实例变量和方法
上节介绍了使用实例的__dict__查看实例的自定义属性,其实还可以直接使用__dict__定义实例变量和实例方法. 一. 使用__dict__定义实例变量 语法: 对象名. dict[属性名] = ...
- OC基础:继承.初始化方法,便利构造器 分类: ios学习 OC 2015-06-16 19:27 84人阅读 评论(0) 收藏
继承: 1.单向继承,一个类只能有一个父类,一个父类可以有多个子类. 2.单向继承,基类(根类)是OSObject 3.子类可以继承父类的属性和方法 当父类的方法不满足子类的需求时,子类可以重写父类的 ...
- OC 实例变量(Instance Var)和成员变量(member var)区别
摘要: Objective-C 引入了“实例变量"的概念,但同时, 也经常出现 “成员变量”的声音. 到底什么是实例变量,什么是成员变量,二者的区别是什么呢? 今天查看apple 的官方 ...
- 面向对象(类,实例变量,方法定义,方法重载,构造方法,this,string类)
面向对象 类是由属性和方法组成 类是所有创建对象的模板 实例变量有默认值 实例变量至少在本类范围中有效 实例变量与局部变量冲突时,局部变量优先 类中方法定义类似于函数定义 修饰符 返回值类型 方法名( ...
- java学习之实例变量初始化
实例变量的初始化方法 第一种:通过构造函数进行初始化. 第二种:通过声明实例字段初始化. 第三种:通过对象代码块初始化. 通过构造函数进行初始化方法 通过构造函数进行对象初始化,必须在类中声明一个带参 ...
- java静态类、静态方法、静态代码块,静态变量及实例方法,实例变量初始化顺序及内存管理,机制
1.当一个类被第一次使用时,它需要被类加载器加载,而加载过程涉及以下两点: (1)在加载一个类时,如果它的父类还未被加载,那么其父类必须先被加载: (2)当类加载到内存之后,按照在代码中的出现顺序执行 ...
- OC 实例变量(instance var)与属性(@property)的关系 isa指针
实例变量(instance var)与属性(@property)的关系 Objective-C 2.0之后,声明一个@property name自动产生一个实例变量,名为_name,因此省去实例变量和 ...
随机推荐
- SQL Server 查询表的记录数(3种方法,推荐第一种)
http://blog.csdn.net/smahorse/article/details/8156483 --SQL Server 查询表的记录数 --one: 使用系统表. SELECT obje ...
- 调度系统任务创建---Git部署项目(一)
有任务要上线时,需要将任务所在的项目代码从git上取出,在调度系统中编译打包,分发大任务执行服务器上. 具体的任务可以参考:http://192.168.53.100:8090/jenkins/vie ...
- 从零开始CSS(一 2016/9/21)
1.基础语法 CSS 规则由两个主要的部分构成:选择器,以及一条或多条声明. selector {declaration1; declaration2; ... declarationN } 选择器通 ...
- 转:已知2个整形数据a,b.不使用if,?:以及其他任何条件判断的语法,找出a跟b中数据的大者。
答案: int max(int a,int b){return (a+b+abs(a-b))/2;} 类似的 请定义一个宏,比较两个数a.b的大小,不能使用大于.小于.if语句 答案: #define ...
- android ViewGroup事件分发机制
1:事件分销过程 自定义一个LinearLayout,重写dispatchTouchEvent onInterceptTouchEvent onTouchEvent,定义一个按键重写dispathcT ...
- win7文件夹图标中多了一把小锁打不开文件夹怎么办?
win7文件夹图标中多了一把小锁打不开文件夹怎么办?解决办法一:右击目录→取得管理员权限!该方法适用于win7旗舰版.解决办法二:右击目录→属性→安全→高级→选择everyone→更改权限→勾上完全访 ...
- ArrayList 如何增加大小
JDK1.8 private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {}; transient Object[] elem ...
- java 注释
单行注释// 多行注释/* */ 注释并写入javadoc /** */ // 这是单行注释的示例 /* 这个也是单行注释的示例 */ /* 这是第一个Java程序 *它将打印Hello Worl ...
- Android Hook Dexposed原理小析
dexposed是阿里巴巴在xposed框架上面开发的hotpatch一套框架 当然hotpatch的方式有很多,这里先介绍下dexposed原理 Demo中有个test函数, 在调用hook之前正常 ...
- 运行Python脚本的方法
1.安装完Python后,添加环境变量---在系统变量中找到Path ,点击编辑把你的python安装目录放到里面,注意环境变量之间用";"隔开.打开CMD,在CMD命令行中,输入 ...