/**
 数组长度不固定,可以随便往里面添加或者删除元素。
 1.创建数组
  NSMutableArray *arrayM = [NSMutableArray array]
 2.给数组添加元素(只能是OC对象)
 - (void)addObject:(id)anObject;
 3.如何删除数组元素
 
 
 */

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // 1.如何创建1个可变数组
        NSMutableArray *arrayM = [NSMutableArray array];
        
        // 2.给数组里面添加元素
        [arrayM addObject:@"ssssx"];
        [arrayM addObject:@"赵信"];
        [arrayM addObject:@"嘉文"];
        [arrayM addObject:@"ssssx"];
        [arrayM addObject:@"赵信"];
        [arrayM addObject:@"嘉文"];
        [arrayM addObject:@"ssssx"];
        [arrayM addObject:@"赵信"];
        [arrayM addObject:@"嘉文"];
        
        // 3.删除数组元素
        // 删除指定名字的数组元素
        [arrayM removeObject:@"ssssx"];
        // 删除指定位置的数组元素
        [arrayM removeObjectAtIndex:1];
        // 删除所有元素
        [arrayM removeAllObjects];
        
        NSLog(@"%@",arrayM);
        
    }
    return 0;
}



/*
@synthesize name = _b; //相当于操作_b的值
-(void)setName:(NSString *) name
{
    _b = name;
}

-(NSString *)name
{
    return _b;
}
注意:在4.4之前,@property和@synthesize成对出现
 
 2)@property 在Xcode4.4之后(@property增强)
 增强使用:
 @property int score;
 
 1).h文件中 帮我们声明 setScore(setter) 和score(getter)方法
 2).m 中帮我们生成_score的私有变量(在外部不能访问,不能被子类继承)
 3).m 中帮我们实现 get和set方法

 3、动态类型&id类型
 
 动态类型:程序在运行的时候,才能确定对象属于什么类型
 静态类型:程序编译的时候,就确定了对象的类型
 
 动态类型的体现: 多态,父类指针可以指向子类对象
 NSObject 是所有类的基类
 NSObject *obj = [Dog new];
 父类调用子类特有的方法
 [(Person *)obj eat];
 //id类型,id类型又被称为 万能指针。
 id obj; //运行时检查
 obj = [Car new]; //实例变量 _speed
 [obj stop];
//id类型调用子类的方法的时候不要强制类型转换,NSObject *类型调用子类方法的时候要强制类型转换。
 
 6、构造方法的使用
 [Person new];
 -> [Person alloc];//空间申请完后,不能立即使用,有可能会导致意想不到的错误
 
 -> [[Person alloc] init];
 [Person new]; 会把我们的成员变量的值,默认的设置为0