OC实例变量初始化方法

OC实例变量初始化方法
1. 使用实例setter方法 默认初始化方法 + setName:xxx setAge:xxx
2. 使用实例功能类方法,默认初始化方法 + setName:xxx age: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类的方法,这样能保证多个入口一个出口,避免混乱。

时间: 2024-10-26 09:08:47

OC实例变量初始化方法的相关文章

Java实例变量初始化

由一道面试题所想到的--Java实例变量初始化 时间:2015-10-07 16:08:38      阅读:23      评论:0      收藏:0      [点我收藏+] 该题目源自微信公众号(程序员的那些事)的推送:携程 Java 工程师的一道面向对象面试题 题目是这样的:求下面程序的输出: public class Base { private String baseName = "base"; public Base() { callName(); } public v

Oc(实例变量可见度与方法)(InstanceVariableAndMethod)

main函数 // //  main.m //  2-3 LessionInstanceVariableAndMethod // //  Created by lanouhn on 15/2/3. //  Copyright (c) 2015年 lanouhn. All rights reserved. // #import <Foundation/Foundation.h> #import "Boy.h" #import "MobilePhone.h"

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

Java 类的实例变量初始化的过程 静态块.非静态块.构造函数的加载顺序 先看一道Java面试题: 1 public class Baset { 2 private String baseName = "base"; 3 // 构造方法 4 public Baset() { 5 callName(); 6 } 7 // 成员方法 8 public void callName() { 9 // TODO Auto-generated method stub 10 System.out.p

OC基础:继承.初始化方法,便利构造器

继承: 1.单向继承,一个类只能有一个父类,一个父类可以有多个子类. 2.单向继承,基类(根类)是OSObject 3.子类可以继承父类的属性和方法 当父类的方法不满足子类的需求时,子类可以重写父类的方法,重写父类的方法,在子类中不需要再次声明. 1.完全重写 2.部分重写   使用super 建立继承关系之后,子类可以继承父类的: 1.实例变量,@[email protected]修饰情况之下 2.公开的方法 一个方法如果在.h中声明了,那么这个方法就是公开的方法,如果没有声明,则是私有的.

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

摘要:  Objective-C  引入了“实例变量"的概念,但同时, 也经常出现 “成员变量”的声音. 到底什么是实例变量,什么是成员变量,二者的区别是什么呢? 今天查看apple 的官方文档时(如下).https://developer.apple.com/library/mac/referencelibrary/GettingStarted/Learning_Objective-C_A_Primer/index.html 发现了一个新的名词: 成员变量(member variable).

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

面向对象 类是由属性和方法组成 类是所有创建对象的模板 实例变量有默认值 实例变量至少在本类范围中有效 实例变量与局部变量冲突时,局部变量优先 类中方法定义类似于函数定义 修饰符 返回值类型 方法名(参数1,参数2) 异常{ 方法体 } 方法重载 参数个数不同 参数类型不同 参数类型相同但是顺序不同 传入参数的不同自动选取相应方法:典型例子system.out.println(整形,字符串等); 构造方法 1.构造方法无返回值 2.不定义的情况下,有默认的空构造方法 3.在对象构造时,被自动调用

4 什么是类、对象、实例变量、方法

面向对象编程中,一般OC程序由三个文件组成:.h文件     .m文件     main.m文件.编译时,Xcode是编译所有.m上文件的. .h文件:这是一个头文件,也可以说是接口部分.实例变量(类的属性).对象方法.类方法的声明都在这个文件中. 如果定义一个“人”类, Person.h @interface Person : NSObject //人的属性(实例变量) { NSString *_name; //姓名 int _age; //年龄 } //对象方法的声明(行为) - (void

【java基础知识】【类中的实例变量和方法】

当创建一个类的时候, 它其中的变量如果已经被初始化的话,那么就会有一个初始值. 例如: Handler mHandler = new Handler() { public void handleMessage(Message msg) { selectorDialog.cancel(); if (msg.what == 1) { newsList = (List<News>) msg.obj; listViewAdapter = new MainListViewAdapter(NewsMain

java实例变量及方法调用顺序

public class Base { private String name="base"; public Base(){ sayHello(); } void sayHello() { System.out.println("Base hello " + name); } } class Derived extends Base { private String name="Derived"; public Derived(){ sayHel