A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 翟宇浩 中级黑马   /  2015-9-8 22:10  /  763 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 翟宇浩 于 2015-9-8 22:17 编辑

init 方法就是构造方法,是用来初始化对象,初始化完成后成员变量的值都是0.
alloc 为该类分配内存空间,以存放该类的全部实例变量,还将这块内存区域全部初始化为0.
例如: Person *p = [[Person alloc] init];    相当于  Person *p = [Person new];


应用:先在有5个士兵,每个士兵都拥有一把枪,每把枪有5发子弹,每人都可以开枪
类:Solider             类:Gun
属性:枪                属性:子弹
行为:开枪            行为:射击

Gun.h
#import <Foundation/Foundation.h>
@interface Gun : NSObject
@property int bulletCount;       //声明属性
-(void)shoot;
@end

Gun.m
#import "Gun.h"
@implementation Gun
//重写构造方法,让子弹数初始化时就是5个
-(instancetype)init{
    if (self = [super init]) {
        _bulletCount = 5;
    }
    return self;
}
-(void)shoot{
    if (_bulletCount>0) {
        _bulletCount--;//每射击一次,减少一枚子弹
        NSLog(@"枪在射击,剩余子弹 %d",_bulletCount);
    }else{
        NSLog(@"枪没子弹了");
    }
}
@end

Solider.h
#import <Foundation/Foundation.h>
#import "Gun.h"
@interface Solider : NSObject
@property Gun *gun;    //让Solider拥有Gun的属性
-(void)fire;
@end

Solider.m
#import "Solider.h"
@implementation Solider
-(void)fire{
    [_gun shoot];    //士兵开火时是使用枪进行射击
}
//每次创建Solider的对象时都给士兵配上枪
-(instancetype)init{
    if (self = [super init]) {
        Gun *gun = [Gun new];
        _gun = gun;
    }
    return self;
}
@end

main.m
#import <Foundation/Foundation.h>
#import "Solider.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        //利用for循环,让每个士兵都拥有自己的枪,射击时消耗的是自己的子弹
        for (int i = 0; i<5; i++) {
            Solider *s1 = [Solider new];
            [s1 fire];
            [s1 fire];
        }
    }
    return 0;
}

运行结果为:
枪在射击,剩余子弹 4
枪在射击,剩余子弹 3
枪在射击,剩余子弹 4
枪在射击,剩余子弹 3
枪在射击,剩余子弹 4
枪在射击,剩余子弹 3
枪在射击,剩余子弹 4
枪在射击,剩余子弹 3
枪在射击,剩余子弹 4
枪在射击,剩余子弹 3


1 个回复

倒序浏览
你这绝对是大神。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马