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,因此省去实例变量和 ...
随机推荐
- Struts2之Action
Struts2之Action MVC模式中需要有一个控制器来负责浏览器与服务器之间的通信,实现用户与服务器的交互.在Struts2框架中实现这一功能的是Action,它是整个框架最核心的部分.Acti ...
- iscroll 使用及遇到的问题
介绍: iscroll.js 是滑动事件.在手机上可以快速的滑动,用户体验很好.在线例子: 选择套餐 iScroll必须在调用之前实例化---用法 <script src="iscro ...
- iOS开发之UITapGestureRecognizer单双击
转自手势开发 IOS开发之手势——UIGestureRecognizer 共存 在 iPhone 或 iPad 的开发中,除了用 touchesBegan / touchesMoved / touch ...
- iOS开发 火星坐标转百度坐标
CLLocationCoordinate2D coor = CLLocationCoordinate2DMake(latitude, longitude);//原始坐标 //转换 google地图.s ...
- 面试题2:BAT及各大互联网公司2014前端笔试面试题:HTML/CSS篇
BAT及各大互联网公司2014前端笔试面试题:HTML/CSS篇 Html篇: 1.你做的页面在哪些流览器测试过?这些浏览器的内核分别是什么? IE: trident内核 Firefox:gecko内 ...
- 使用 GPG 对数据进行加密解密签名
一:使用 GPG 对数据进行加密解密签名 基本的工具使用 1. GPG 是GNUPG 免费开源的gpg加密工具,和同pgp兼容,pgp收费. 2. 在mac上使用https://gpgtools.or ...
- 防止SVN冲突,Elipse资源同步介绍
灰色向右箭头: 本地修改了 灰色向右箭头且中间有白色减号: 本地删除了,服务器未删除 灰色向右且中间有个加号的箭头:本地比SVN上多出的文件 蓝色向左箭头:svn上修改过 蓝色向左且中间有个加号的箭头 ...
- Windows 10:解决开机显示C:\WINDOWS\system32\config\systemprofile\Desktop不可用的方法
开机显示C:\WINDOWS\system32\config\systemprofile\Desktop不可用应该是不少网友都遇到过. 近日在使用Windows 10 Build 9926中,也出 ...
- (转)【深入浅出jQuery】源码浅析2--奇技淫巧
[深入浅出jQuery]源码浅析2--奇技淫巧 http://www.cnblogs.com/coco1s/p/5303041.html
- Octopus系列之代码备份
代码 $.extend($.validator.messages, { required: "This field is required.", remote: "Ple ...