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. oracle数据库的TNS配置

    TNS简要介绍与应用 Oracle中TNS的完整定义:transparence Network Substrate透明网络底层,监听服务是它重要的一部分,不是全部,不要把TNS当作只是监听器. TNS ...

  2. Android Studio中的六种依赖

    在Android Studio中有六种依赖 Compile,Provided,APK,Test compile,Debug compile,Release compile Compile compil ...

  3. 16 SQL Tuning Overview

    16.1 Introduction to SQL Tuning Identifying high load or top SQL statements that are responsible for ...

  4. MongoDB:实体对象(javabean)转DBObject

    代码仅供练习(反射,泛型): package utils; import java.lang.reflect.Field; import com.mongodb.BasicDBObject; impo ...

  5. 用cxf开发restful风格的WebService

    我们都知道cxf还可以开发restful风格的webService,下面是利用maven+spring4+cxf搭建webService服务端和客户端Demo 1.pom.xml <projec ...

  6. JQuery操作HTML文档

    一.JQuery选择元素 1.$("p").click(function(){$(this).hide();} 点击HTML页面的任何p元素都会隐藏该p元素 2.$("# ...

  7. redhat网络基础配置

    添加浮动IP: ifconfig eth0:1 192.168.1.106 IP配置文件: BOOTPROTO: 采用的启动协议,有三种选择: (1) none:不使用启动协议 (2) static: ...

  8. Redis + php扩展的安装与配置(windows)

    -->安装Redis服务 下载redis安装包 http://pan.baidu.com/s/1pJiVFHx 下载后解压 把解压后文件夹里面的文件(根据自己的系统位数选择32位或者64位)拷贝 ...

  9. [转]深入理解Java 8 Lambda(语言篇——lambda,方法引用,目标类型和默认方法)

    以下内容转自: 作者:Lucida 微博:@peng_gong 豆瓣:@figure9 原文链接:http://zh.lucida.me/blog/java-8-lambdas-insideout-l ...

  10. ios批量打包

    最近我们接到了新的需求,需要打出类似xx001-xx100共100个这样的ipa渠道包,不需要签名.(这批ipa包后续会用企业证书签名,不会影响AppStore的) 这些包所有的功能.内容都是一样的, ...