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,因此省去实例变量和 ...
随机推荐
- python 反射调用
因为目前在写一个python的项目,用到了Python的反射机制,所以做一下笔记,把写项目过程中的感悟记下来. 先简单介绍下Demo用到的函数: sys.path 是python的模块的路径集,是一个 ...
- HR数据抽取:通过 Read Master Data 转换规则读取时间相关主属性数据
声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...
- 使用jquery中height()方法获取各种高度大全
alert($(window).height()); //浏览器当前窗口可视区域高度 alert($(document).height()); //浏览器当前窗口文档的高度 alert($(docum ...
- CSS3之尖角标签
如图所示,Tag标签的制作通常使用背景图片,现在用CSS3代码就能实现尖角效果(需浏览器支持CSS3属性). 运用CSS3样式实现尖角标签,只需要写简单的HTML结构和CSS样式. <p> ...
- 视频播放器之————JW Player参数详解
JW Player参数详解 1,安装 下载后,你可以得到一个例子,当用文本或HTML编辑器打开的时候,你可以发现swf是用一段短小的 javascript嵌入到页面上的.这个Javascript是Ge ...
- 使用celery之深入celery配置(转)
原文:http://www.dongwm.com/archives/shi-yong-celeryzhi-shen-ru-celerypei-zhi/ 前言 celery的官方文档其实相对还是写的很不 ...
- golang csv问题
go语言自带的有csv文件读取模块,看起来好像不错,今天玩玩,也算是系统学习go语言的一部分--^_^ 一.写csv文件 函数: func NewWriter(w io.Writer) *Writer ...
- CSS 3 选择器
css3叫做样式表 对页面的布局,字体,颜色,背景和其他效果做更精确的布置 支持的浏览器有 chrome safari firfox opera 甚至360都开始支持360用的是别的内核 IE10 ...
- 经典SQL语句大全以及50个常用的sql语句
经典SQL语句大全 一.基础 1.说明:创建数据库CREATE DATABASE database-name 2.说明:删除数据库drop database dbname3.说明:备份sql serv ...
- python语言技巧
一 在写之前 最好指定python的路径: #!/usr/bin/python python 在linux中需要添加编码方式:以免出现中文乱码 # -*- coding: UTF-8 –*- 二 ...