1 使用实例setter方法 默认初始化方法 + setName:xxx setAge:xxx

2 使用实例功能类方法,默认初始化方法 + setName:xxx age:xxx
3 使用实例初始化方法 initWith开头的方法
4 使用构造器 类名+With…
以Person  Student两个类为例
1 使用实例 setter方法
这是最麻烦的方法

  1. @interface Person : NSObject
  2. {
  3. NSString *_name;
  4. NSString *_sex;
  5. int _age;
  6. }
  7. //setter方法
  8. -(void)setName:(NSString *)name;
  9. -(void)setSex:(NSString *)sex;
  10. -(void)setAge:(int)age;
  11. @end
  12. @implementation Person
  13. //setter方法
  14. -(void)setName:(NSString *)name
  15. {
  16. _name = name;
  17. }
  18. -(void)setSex:(NSString *)sex
  19. {
  20. _sex = sex;
  21. }
  22. -(void)setAge:(int)age
  23. {
  24. _age = age;
  25. }
  26. @end
  27. @interface Student : Person
  28. {
  29. NSString *_studentID;
  30. float _score;
  31. }
  32. //setter
  33. -(void)setStudentID:(NSString *)studentID;
  34. -(void)setScore:(float)score;
  35. @end
  36. @implementation Student : Person
  37. //setter
  38. -(void)setStudentID:(NSString *)studentID
  39. {
  40. _studentID = studentID;
  41. }
  42. -(void)setScore:(float)score
  43. {
  44. _score = score;
  45. }
  46. @end
  47. int main()
  48. {
  49. Student *stu = [[Student alloc]init];//开辟空间调用初始化方法
  50. //使用setter方法为实例变量赋值。
  51. [stu setName:@"xiaoA"];
  52. [stu setSex:@"Man"];
  53. [stu setAge:15];
  54. [stu setStudentID:@"2008-07"];
  55. [stu setScore:96];
  56. return 0;
  57. }

2 使用实例功能类方法赋值
简单于setter方法

  1. @interface Person : NSObject
  2. {
  3. NSString *_name;
  4. NSString *_sex;
  5. int _age;
  6. }
  7. -(void)setName:(NSString *)name sex:(NSString *)sex age:(int)age;
  8. @end
  9. @implementation Person
  10. -(void)setName:(NSString *)name sex:(NSString *)sex age:(int)age
  11. {
  12. _name = name;
  13. _sex = sex;
  14. _age = age;
  15. }
  16. @end
  17. @interface Student : Person
  18. {
  19. NSString *_studentID;
  20. float _score;
  21. }
  22. -(void)setStudentID:(NSString *)studentID score:(float)score;
  23. @end
  24. @implementation Student : Person
  25. -(void)setStudentID:(NSString *)studentID score:(float)score
  26. {
  27. _studentID = studentID;
  28. _score = score;
  29. }
  30. @end
  31. int main()
  32. {
  33. Student *stu = [[Student alloc]init];//开辟空间调用初始化方法
  34. //使用setter方法为实例变量赋值。
  35. [stu setName:@"xiaoA" sex:@"Man" age:15];
  36. [stu setStudentID:@"2008-02" score:97];
  37. return 0;
  38. }

3 使用实例初始化方法 initWith开头的方法
这是一种比较常用的方法

  1. @interface Person : NSObject
  2. {
  3. NSString *_name;
  4. NSString *_sex;
  5. int _age;
  6. }
  7. -(void)initWithName:(NSString *)name sex:(NSString *)sex age:(int)age;
  8. @end
  9. @implementation Person
  10. -(void)initWithName:(NSString *)name sex:(NSString *)sex age:(int)age
  11. {
  12. self = [super init];
  13. if(self)
  14. {
  15. _name = name;
  16. _sex = sex;
  17. _age = age;
  18. }
  19. return self;
  20. }
  21. @end
  22. @interface Student : Person
  23. {
  24. NSString *_studentID;
  25. float _score;
  26. }
  27. -(void)initWithName:(NSString *)name sex:(NSString *)sex age:(int)age studentID:(NSString *)studentID score:(float)score;
  28. @end
  29. @implementation Student : Person
  30. -(void)initWithName:(NSString *)name sex:(NSString *)sex age:(int)age studentID:(NSString *)studentID score:(float)score
  31. {
  32. self = [super initWithName:name sex:sex age:age];
  33. if(self)
  34. {
  35. _studentID = studentID;
  36. _score = score;
  37. }
  38. return self;
  39. }
  40. @end
  41. int main()
  42. {
  43. Student *stu = [[Student alloc]initWithName:@"xiaoA" sex:@"Man" age:15 studentID:@"2008-2" score:97];//开辟空间调用初始化方法
  44. return 0;
  45. }

这种赋值方法有几点需要注意:
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实例变量初始化方法的更多相关文章

  1. Java实例变量初始化

    由一道面试题所想到的--Java实例变量初始化 时间:2015-10-07 16:08:38      阅读:23      评论:0      收藏:0      [点我收藏+] 标签:java   ...

  2. Java 类的实例变量初始化的过程 静态块、非静态块、构造函数的加载顺序

    先看一道Java面试题: public class Baset { private String baseName = "base"; // 构造方法 public Baset() ...

  3. 第8.12节 Python类中使用__dict__定义实例变量和方法

    上节介绍了使用实例的__dict__查看实例的自定义属性,其实还可以直接使用__dict__定义实例变量和实例方法. 一. 使用__dict__定义实例变量 语法: 对象名. dict[属性名] = ...

  4. OC基础:继承.初始化方法,便利构造器 分类: ios学习 OC 2015-06-16 19:27 84人阅读 评论(0) 收藏

    继承: 1.单向继承,一个类只能有一个父类,一个父类可以有多个子类. 2.单向继承,基类(根类)是OSObject 3.子类可以继承父类的属性和方法 当父类的方法不满足子类的需求时,子类可以重写父类的 ...

  5. OC 实例变量(Instance Var)和成员变量(member var)区别

    摘要:  Objective-C  引入了“实例变量"的概念,但同时, 也经常出现 “成员变量”的声音. 到底什么是实例变量,什么是成员变量,二者的区别是什么呢? 今天查看apple 的官方 ...

  6. 面向对象(类,实例变量,方法定义,方法重载,构造方法,this,string类)

    面向对象 类是由属性和方法组成 类是所有创建对象的模板 实例变量有默认值 实例变量至少在本类范围中有效 实例变量与局部变量冲突时,局部变量优先 类中方法定义类似于函数定义 修饰符 返回值类型 方法名( ...

  7. java学习之实例变量初始化

    实例变量的初始化方法 第一种:通过构造函数进行初始化. 第二种:通过声明实例字段初始化. 第三种:通过对象代码块初始化. 通过构造函数进行初始化方法 通过构造函数进行对象初始化,必须在类中声明一个带参 ...

  8. java静态类、静态方法、静态代码块,静态变量及实例方法,实例变量初始化顺序及内存管理,机制

    1.当一个类被第一次使用时,它需要被类加载器加载,而加载过程涉及以下两点: (1)在加载一个类时,如果它的父类还未被加载,那么其父类必须先被加载: (2)当类加载到内存之后,按照在代码中的出现顺序执行 ...

  9. OC 实例变量(instance var)与属性(@property)的关系 isa指针

    实例变量(instance var)与属性(@property)的关系 Objective-C 2.0之后,声明一个@property name自动产生一个实例变量,名为_name,因此省去实例变量和 ...

随机推荐

  1. python __file__ 与argv[0]

    在python下,获取当前执行主脚本的方法有两个:sys.argv[0]和__file__. sys.argv[0] 获取主执行文件路径的最佳方法是用sys.argv[0],它可能是一个相对路径,所以 ...

  2. 16s及宏基因组测序公司资源--20161104

    锐羿基因: http://www.realbio.cn/index.php?c=list&cs=keyandongtai& 科研动态更新及时 青岛过程能源所: http://www.c ...

  3. 【OOAD】OOAD概述

    什么是面向对象? OOP:面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)是一种计算机编程架构.OOP 的一条基本原则是计算机程序是由单个能够起到子程序 ...

  4. Vim入门教程

    尽管网上有成打的Vim在线教程,但是要么艰深晦涩,要么太过肤浅.本教程的目标让每个阶段都有斩获,从理解它的哲学(将和你终身相伴)到超越现在编辑技巧,成为其中的牛人. 简单来说,本教程的学习方式将使你终 ...

  5. js 获取iframe中的元素

    今天要修改编辑器插件中的元素遇到的问题 jquery 在父窗口中获取iframe中的元素 1.Js代码 格式:$("#iframe的ID").contents().find(&qu ...

  6. Logistic 分类器与 softmax分类器

    首先说明啊:logistic分类器是以Bernoulli(伯努利) 分布为模型建模的,它可以用来分两种类别:而softmax分类器以多项式分布(Multinomial Distribution)为模型 ...

  7. HBase之show table

    import org.apache.hadoop.hbase.HTableDescriptor; import org.apache.hadoop.hbase.TableName; import or ...

  8. MySQL浮点计算存在的问题与解决方案

    如有疑问请联系微信:onesoft007    在计算机中,浮点数往往很难精确表示,那么浮点数运算结果也往往难以精确表示.MySQL同样也存在这个问题,并表现在如下几个方面. 问题 1.相同的输入,可 ...

  9. CentOS7 增加tomcat 启动,停止,使用systemctl进行配置

    1,centos7 使用 systemctl 替换了 service命令 参考:redhat文档: https://access.redhat.com/documentation/en-US/Red_ ...

  10. Technology Remarks

    -----------------------分隔符-----12.10.2016------ 抓视频    关键字补充: Base64编码/解码 出现这样的情况怎么办呢? 网址: abook-hep ...