本帖最后由 翟宇浩 于 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
|