OC初始化函数和便利构造器



#import <Foundation/Foundation.h>
#import "Student.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        Student *str1 = [[Student alloc]init];
        NSLog(@"str1 的地址为%p",str1);
        str1.name = @"李树程";
        str1.age = 23;
        Student *str2 = [[Student alloc]initWithID:@"2010122" sexChoice:@"女"];
        str2.name = @"潘志景";
        str2.age = 23;
    }
    return 0;
}





#import <Foundation/Foundation.h>

@interface Student : NSObject
{
    NSString *_sexChoice;
}
@property (nonatomic,assign,readonly) NSString *sID;
@property (nonatomic,assign) NSInteger age;
@property (nonatomic,retain) NSString *name;

//自定义初始化方法
-(id)initWithID:(NSString *)sID sexChoice:(NSString *)sexChoice;
@end


//
//  Student.m
//  test_04
//
//  Created by Ibokan on 15/7/24.
//  Copyright (c) 2015年 ibokan. All rights reserved.
//

#import "Student.h"

@implementation Student
-(void)setAge:(NSInteger)age{
    if (age < 18) {
        _age = 18;
    }
    else{
        _age = age;
    }
}










#import <Foundation/Foundation.h>
#import "Student.h"

int main(int argc, const char * argv[]) {
@autoreleasepool {
/*
面向对象和面向过程的概念?
类和对象的概念?
如何用OC创建一个类
类是由属性和方法组成
实例变量(类的全局受保护的变量)

设置器和访问器
作用: 1.隐藏了实例变量
2.控制实例变量的读写
3.做正确性校验
缺点:太繁杂
解决方法:属性
@property和@sythesize

//对类来说
1.初始化方法 系统的 init
2.自定义初始化方法
-(id)initWithName:(NSString *)name;
3.便利构造器(初始化方法)
在外界构造类的对象时,开发者不需要关心其生命周期

OC中方法
静态方法(也叫类方法) +(id)
实例方法 -(id)

对于方法调用
对于类方法来说,他调用方式是用类来调用
对于实例方法来说,他调用是用对象来调用

*/

Student *str1 = [Student studentWithName:@"chenwen" age:25];
Student *str2 = [[Student alloc]initWithName:@"cten" age:25];
//等价于:Student *str2 = [Student alloc];
//str2 = [str2 initWithName:@"cten" age = 25;
}
return 0;
}

//self表示指向当前实例对象的指针
//super表示指向父类对象的指针
-(id)init{
    NSLog(@"self 的地址为%p",self);
    if (self = [super init]) {
        _sID = @"2010222";
        _sexChoice = @"女";
    }
    return self;
}

-(id)initWithID:(NSString *)sID sexChoice:(NSString *)sexChoice{
    if (self = [super init]) {
        _sID = sID;
        _sexChoice = sexChoice;
    }
    return self;
}
@end




#import <Foundation/Foundation.h>

@interface Student : NSObject
{
    NSString *_sID;
}
@property (nonatomic,retain)NSString *name;
@property (nonatomic,assign)NSInteger age;
-(id)initWithName:(NSString *)name age:(NSInteger)age;
-(void)sayHello;
//便利构造器
//相当于在类里面再写一个跟类无关的方法
+(Student *)studentWithName:(NSString *)name age:(NSInteger)age;
//根据需要创建便利构造器
//根据需要来创建便利构造器相对应的方法
@end



#import "Student.h"

@implementation Student
-(id)initWithName:(NSString *)name age:(NSInteger)age{
    if (self = [super init]) {
        self.name = name;
        self.age = age;
//        _sID = @"asf";
//        [self sayHello];
    }
    return self;
}
+(Student *)studentWithName:(NSString *)name age:(NSInteger)age{
    Student *str = [[Student alloc]initWithName:name age:age];
//    _sID = @"dfa";
//    [self sayHello];
//    self.name;
    return str;
    
    /*
     在类的内部,对于静态来讲
        1.他不能访问类的实例变量和属性
        2.不能用self调用自带的方法和属性
     */
}
@end



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值