oc

//

//  main.m

//  oc

//

//  Created by 付军伟 on 15/11/16.

//  Copyright © 2015 scsys. All rights reserved.

//


#import <Foundation/Foundation.h>

//创建1.创建一个对象 要现在 要创建的位置导入,要创建那个类(.h

#import "Person.h"

#import "Phone.h"

#import "Hero.h"// import 导入整个*声明文件*   可以使用里面所有东西 @class 提示类名 并没有使用这个类  只可以使用类名 里面的内容不允许使用

#import "Monster.h"

#import "Flower.h"

#import "YellowPerson.h"

#import "BlackPerson.h"

#import "WhitePerson.h"


int main(int argc, const char * argv[]) {

    @autoreleasepool {

   //创建2.1开始创建alloc(开辟一个领地,就是一块内存空间)

   // 创建2.2inti 创建一个对象(初始化一个对象  有一些基本的功能)

    //Person *hanBing=[[Person alloc]init];//Person(类名) *hanBing(对象名)=[Person alloc]给个领地;hanBing=[hanBing init]创建hanBing  allocinit是让一个对象出来(创建)的方法(c的函数 就是oc的方法)

    //方法的调用[对象名 方法名]

//        [hanBing speak];

//        [hanBing smoking];

//        [hanBing speak:@"lai"speak: @"en"];

//        

//        Person *liJiang=[[Person alloc]init];

//        [liJiang run];

        //2

//        Phone  *iPhone=[[Phone alloc]init];

//       NSString *phoneName = [iPhone name ];

//        NSLog(@"%@",phoneName);


    }

#pragma mark=====================第一节====================================

/*今天我们学习foundation框架,foundationcocoa框架中的基础框架 所有得框架都是基于foundation框架   就是把自己当成造物主(程序实现)

 抽象事物(一类事物  oc)类)具有相同特征的事物的类

 oc是一门面向对象(万事万物,都是对象,对象之间有某种联系,这个联系也许很远也许很近,就像我们现在这个世界的发展,由远古到近代,由我们看不见的(无)到看见(有)(十分确定的,大家都知道的,越精确地越清楚地事物(特指),这种事物就是对象))的语言

 c语言是面向过程(按照电脑思维执行代码,一步一步的走,才能实现某些功能)的语言

 oc中的类:(首个字母大写)

 有两种部分组成:

 1类名.h文件  声明文件(告诉别人的文件)   声明这个类可以让别的类知道的属性和方法

 2类名.m文件  实现文件 一个类具体怎么去实现他自己的功能,

 oc中去创建一个对象 (创造步奏1 ——2.1——2.2) 对象:一个具体的事物,是一个包含具体属性的一个实实在在的实体

 确定对象是哪个类

 人类的寒冰*/

#pragma mark=====================第二节====================================

 /*字符串 有返回值方法

  ----------------

 有返回值方法的公式:

 声明公式:

 - (返回值类型)方法名;

 实现方法是:

 - (返回值类型)方法名

 {

 return 返回值类型的数据

 }

 调用:

 [对象名 方法名]//他就是具体的数据

有返回值的方法的作用:给别人一个数据

 有参无返回值的函数  给别人要个数据

 - void)函数名:(参数类型)参数名

 {}

  ---------------

 字符串

 NSString

 1.初始化

  NSString *string = @"我是万元班的学生。";

  NSString *string = [NSString string];//创建空字符串

  NSString *string = [[NSString alloc]init];//创建空字符串

  

 2.处理字符串

  2.1 把字符串转成大写(字母构成)

  NSString *name = @"fuluwa";

  name = [name uppercaseString];

  NSLog(@"%@",name);

  

  2.2 把字符串转成小写(字母构成)

  NSString *name = @"FULUWA";

  name = [name lowercaseString];

  NSLog(@"%@",name);

  

  2.3首个字母大写

  NSString *name = @"fuluwa";

  name = [name capitalizedString];

  NSLog(@"%@",name);

  

 3判断字符串是不是以什么字符开头的

  BOOL 布尔类型——>只有yes1 no0

  BOOL 默认值 NO

  NSString *Phone =@"18628861029";

  BOOL isRight = [Phone hasPrefix:@"135"];

  if (isRight !=YES) {

  NSLog(@"bushi");

  }

  else{   NSLog(@"shi");}

  

  判断以什么结尾

  BOOL 是以!=yes判断

  NSString *Phone =@"18628861029";

  BOOL isRight = [Phone hasSuffix:@"1029"];

  if (isRight !=YES) {

  NSLog(@"bushi");

  }

  else{   NSLog(@"shi");}

  

 4判断字符串中有没有那些字

  NSRange:范围 以起点位置和长度表示

  NSRange range;

  range.location起点位置 = 1;

  range.length长度 = 3;

  NSString *string = @"背着书包去放牛。";

  //  需要找书包    NSNotFound表示没有找到

  NSRange range = [string rangeOfString:@"书包"];

  if (range.location !=NSNotFound ) {

  NSLog(@"背着书包呢");

  }

  

 5判断 字符相同

  NSString *string =@"阿里";

  BOOL isEqual =[string isEqualToString:@"阿狸"];

  if (isEqual !=YES) {

  NSLog(@"不是相同");

  }

  else{

  NSLog(@"相同");

  }

  

 6截取一部分字符串

  //开始到那

  NSString *string = @"太阳光!金亮亮!鸡唱三场!";

  NSString *newstring = [string substringToIndex:3];

  NSLog(@"%@",newstring);

  

  //从哪到结尾

  NSString *string = @"太阳光!金亮亮!鸡唱三场!";

  NSString *newstring1 = [string substringFromIndex:2];

  NSLog(@"%@",newstring1);

  

  //从哪到哪

  NSString *string = @"太阳光!金亮亮!鸡唱三场!";

  NSRange range = {4,3};//不包括4

  NSString *newstring2 = [string substringWithRange:range ];

  NSLog(@"%@",newstring2);

  

用户能够看见的是main函数里地NSLog程序,实现方法中的nslog只是让程序员检测有没有实现这个方法

  

  

   */

//    Phone  *iPhone=[[Phone alloc]init];

//    [iPhone setName:@"xiaotian"];

//    NSString *name1 = [iPhone name ];

//    NSLog(@"%@",name1);

#pragma mark=====================第三节====================================

    //字符串拼接  stringByAppendingString stringByAppendingFormat:的方法

//stringByAppendingFormat:stringWithFormat: 都可以把其他都格式化为字符串

//    NSString *string = @"100";//string基础上新加一个字符串->生成一个新的字符串

//    NSString *string1 = [string stringByAppendingString:@"我开心死了"];//string的后面拼接上@“我开心死了 谁调用哪个拼接方法谁就是新的字符串前面

//    NSLog(@"%@",string1);

//    NSLog(@"%@",string);

//    NSString *string = @"金刚葫芦娃";

//    NSString *string1 = @"";

//    int b =500;

//    NSString *string2 = @"钢铁的做的";

//    NSString *string3 = @"";

//   //格式化 拼接字符串    可以把任何格式的对象(int float)转换成字符串   生成一个新的字符串

//    //在一个字符串的基础之上,拼接一个格式化的字符串->生成一个新的字符串

//    NSString *string4 = [string stringByAppendingFormat :@"%@%@%d%@",string1,string2,b,string3];

//    float m = 2.2;

//    NSString *string5 = [NSString stringWithFormat:@"%@%@%@%d%@",string,string1,string2,b,string3];//使用格式化字符串->把其他格式的转换成字符串 不在原有的字符串内容上添加,添加内容需要我们把原有的给加上

   

    

    //数据转换

    //把其他数据类型 转换成字符串 可以使用格式化 字符串的方法

    //字符串 转换成bool类型那个

    //除了数字 字符串转成bool或者int float 都是如果是数字 就是对应的数字

//    NSString *s = @"12";

//    BOOL is = [s intValue];//bool 里面只有yes1no0)需要转换的字符串内容 必须是 0 1

//    int  num = [s intValue];

//    NSLog(@"%d",is);

//    NSLog(@"%d",num);

//    //判断字符串的长度 length

//    s.length;

    

    

    //可变字符串NSMutableString

    //NSMutableString NSString 的儿子 NSString的方法也可以给NSMutableString都可以使用

    

   // NSMutableString *string = @"deg";//直接用@“”是不可变的字符串

    //方法前面是-表示是一个对象方法 调用 [对象名  方法名]

    //方法前面是+表示是一个类方法  调用 [类名  方法名]

    //oc 允许把两个方法 一起调用 [[NSString alloc]init];

//    NSMutableString *string = [NSMutableString  string];

//    NSMutableString *string1 = [NSMutableString stringWithFormat:@""];

//    NSMutableString *string2 = [NSMutableString stringWithString:@"啦啦"];

//为啥要区分可变和不可变 为了让原来的字符串可以添加内容 修改内容 删除内容。

    //

//    NSMutableString *string = [NSMutableString stringWithFormat:@"哇咔咔"];

//    [string appendFormat:@"stringFormat"];// 格式化内容

    

    //[string insertString:@"string" atIndex:2];//插入一个字符串  指定位置 index:

    

    

    //

    //NSRange range = {2,3};

    //[string deleteCharactersInRange:range];

    

    //

//    NSRange range1 = {1,2};

//    [string replaceCharactersInRange:range1 withString:@"思思123"];

//    NSLog(@"%@",string);

    

    

#pragma mark====================数组====================================

    //数组 按顺序排列的元素的整体

    //取值:通过下标

    //NSArray 数组 oc里面 允许数组里面存放不同数据类型的元素 在取值的时候 一定要注意数组类型 尽量存 相同的数据类型

    //NSArray *list = @[@"",@"",@""];//数组里面 存储的都是NSobject类型的数据

    //基本类型

   // NSNumber或者@ 把数字数据类型的变量包装成(衣服的作用)NSobject类型

    //为什么要把数字转换成NSobject

    //因为 在我们把数字存放到数组的时候 不可以直接存放非NSobject类型的数据

//    int a = 100;

//    float b =2.21;

//    

//    NSNumber *num = [[NSNumber alloc]initWithInt:a];

//    NSNumber *num1 = [NSNumber numberWithInt:a];

//    NSNumber *num3 = [NSNumber numberWithFloat:b];

//    //转换的缩写@(要转的数据)

//    NSArray *list = @[num ,@(50)];

//    NSNumber *num2 = list[1];

    //初始化数组  数组可以存放object类型的数据(基本类型不是object类)允许直接给数组赋值

    //NSArray *array = @[数组元素,数组元素];

//    Hero *tooHao = [[Hero alloc]init];

//    Hero *jChuang = [[Hero alloc]init];

//    NSArray *array = @[tooHao,jChuang];//不能把对象当成字符串存放数组

//    NSArray *array = [[NSArray alloc]init];//创建空

//    NSArray *array2 = [NSArray array];//直接赋空

//    NSArray *array1 = [NSArray arrayWithObject:@"lala"];//初始化只有一个元素的数组

    //NSArray *array3 = [NSArray arrayWithObjects:@"n",@"i", @"s",@"s",@"b",nil];//初始化多个元素的方法  最后一个元素的nil不能省略

    //数组取值 根据下标(0开始的)

    //获得数组长度的属性  数组名.count

//    NSLog(@"%@",array3);

//    for (int i=0; i<array3.count; i++) {

//        NSString *s= array3[i];

//      NSLog(@"%@",s);

//    }

    

    //快速遍历方法

//    for (元素类型 *对象名==取出来的元素 in 数组名 ) {

//        NSLog(@"%@",对象);

//    }

//    for (NSString *s in array3 ) {

//            NSLog(@"%@",s);

//        

//    }

//    Hero *y1 = [[Hero alloc]init];

//    Hero *y2 = [[Hero alloc]init];

//    NSArray *list = @[y1,y2];

//    for (Hero *y in list) {

//      NSLog(@"%@",y);

//    }

    //数组元素之间使用逗号隔开的

//    NSArray *list1 = @[@"lucy",@"lily",@"lilei",@"lihanmeimei"];

//    //NSLog(@"%@",list1);

//    

//    NSString *s =[list1 objectAtIndex:0];//通过方法取值   注意数组越界

//    for (int i=0; i<4; i++) {

//        NSLog(@"%@",[list1 objectAtIndex:i]);

//        NSLog(@"%@",list1[i]);

//    }

    

    //字符串里面可以直接通过一个符号截取字符串 变成数组(符号被省略)注意区分中英文

//   NSString *content = @"福禄娃,小明,老王,大黄  ";

//    NSArray *list2 = [content componentsSeparatedByString:@","];

//    for (NSString *s1 in list2) {

//        NSLog(@"%@",s1);

//    }

    

    //数组转换成字符  直接把数组格式化 数组保持原始形态  可以使用componentsJoinedByString 加入一个符号到数组里分开的元素之间生成一个字符串

 //   NSArray *list3 = @[@"福禄娃",@"小明",@"老王",@"大黄"];

 //   NSString *content1 = [NSString stringWithFormat:@"%@",list3];

//    NSString *content2 = [list3 componentsJoinedByString:@" "];

//    NSLog(@"%@",content1);

    

    //可变数组

   // NSMutableArray  *list = [NSMutableArray arrayWithArray:@[@""]];

    //NSMutableArray  *list = [NSMutableArray arrayWithObjects:@"", nil];

    //增加

    //NSMutableArray *list = [NSMutableArray array];

    //添加元素

   // Hero *hero = [[Hero alloc]init];

   // [list addObject:hero];//加一个hero的元素

    //[list addObject:hero];//在添加一个hero的元素

    

    //alloc init 会创建一个对象

    //有一次alloc init 只会创建一个对象

//    for (int i=0; i<10; i++) {

//        Hero *hero = [[Hero alloc]init];

//        [list addObject:hero];

//        

//    }//生成了10个元素,是不同的hero元素

//   NSLog(@"%@",list);


//    NSMutableArray *array = [NSMutableArray arrayWithObjects:@"li", @"lei",nil];

    //删除元素 通过下标

   // [array removeObjectAtIndex:1];

//    NSRange range = {0,2};

//    [array removeObjectsInRange:range];

   // [array removeLastObject];//删除最后一个

    //[array removeAllObjects];//删除全部

    

    

    //替换元素

//    [array replaceObjectAtIndex:1 withObject:@"hanyang"];

//    for (int i=0; i<array.count; i++) {

//      NSLog(@"%@",array[i]);

//    }

//    NSString *name = @"hanyang";

//   NSUInteger *s = [array indexOfObject:name];//查找元素的下标通过元素

//    NSLog(@"%lu",s);

    

   //回顾

    /*

    数组的初始化:

     NSArray *array = [NSArray array];

     NSArray *array = [[NSArray alloc]init];

     NSArray *array = [NSArray arrayWithObject:@""];

     //        回顾:

     //        1、不可变数组

     

     数组的初始化

     (1)NSArray *list = @[@"",@""];

     (2)NSArray *list = [[NSArray alloc]init];

     (3)NSArray *list = [NSArray array];

     

     初始化并赋值

     (1)只赋一个值NSArray *list = [NSArray arrayWithObject:@""];

     (2)初始化 并赋多个值 NSArray *list = [NSArray arrayWithObjects:@"",@"", nil];

     注意:最后一个元素的逗号 nil 不能省略

     

     */

    

    /*

     数组取值

     (1)list[0];

     (2)[list objectAtIndex:0];

     */

    

    /*

     快速遍历

     for (元素类型 *变量名 in 数组) {

     

     }

     */

    

    /*

     数组转字符串

     (1)直接格式化[NSString stringWithFormat:@"%@",list];

     (2)加入一个字符串去分割数组 [list componentsJoinedByString:@""];

     */

    

    /*

     把字符串转成数组

     通过一个标记 把字符串分割成数组

     NSString *ss =@"qqqq11www11eee";

     [ss componentsSeparatedByString:@"11"];

     */

    

    /*

     可变数组

     增删改查

     (1)添加[list addObject:@""];

     (2)直接删除一个元素:[list removeObject:@""];

     通过下标删除元素:[list removeObjectAtIndex:0];

     删除最后一个元素:[list removeLastObject];

     删除全部元素:[list removeAllObjects];

     

     替换元素:

     通过下标 替换下标对应的元素:[list replaceObjectAtIndex:0 withObject:@""];

     查找元素:

     (1)通过下标:list[0];

     (2)通过内容查找:[list indexOfObject:@""];

     */

    

#pragma mark=====================字典====================================

//字典  没有顺序 不是按顺序排放的

//新华字典 1、可以根据拼音,根据偏旁,可以查到我们想要的文字解释

//拼音,偏旁 oc中是key 是一个关键字  通过关键字搜索好多内容

//想找的文字解释:值

//NSDictionary 字典 的内容是成对出现的(key:值)

//key  关键字字符串 值只要是object类型都可以

 //初始化字典并赋值 用花括号赋值

 //   1直接赋值key 不能一样

 //   NSDictionary *dic = @{@"key":@"" ,@"key1":@"zhi"};

 //用字典 把一个人物的特征表示出来   同一个字典key为唯一的  通过key取值

//    NSDictionary *dic = @{@"name":@"笑话",@"age":@"20",@"face":@"",@"height":@"1.8",@"sex":@"",@"weight":@"50公斤"};

//    NSDictionary *DIc = @{@"name":@"gouhua",@"age":@25,@"face":@"bu ",@"height":@".8",@"sex":@"nv",@"weight":@"55公斤"};

    

    /* {

     age = 20;

     face = "\U5e05";

     name = "\U7b11\U8bdd";

     }*/

  /*  NSDictionary *dic = @{@"name":@"笑话",@"age":@"20",@"face":@"",@"height":@"1.8",@"sex":@"",@"weight":@"50公斤"};

    NSDictionary *a = [NSDictionary dictionaryWithObjectsAndKeys:@"zhi",@"key",@"zhi",@"key", nil];*/

//显示出来的内容格式是 用花括号,都有分号 ,都是成对出现的

    

    //取值公式 字典名 中括号里面是key   dic[key];

   // NSString *name1 = dic[@"name"];

   // NSLog(@"%@",name1);

    //遍历字典  需要查看字典的内容时  需要知道所有的key

    //allkey 获得当前字典的所有key

    //allValues 获得当前字典的所有值

//    NSArray *array = dic.allKeys;

//    for (NSString *key in array) {

//        //NSLog(@"%@----%@",key ,dic[key]);

//    }

   //其他初始化方式

//    NSDictionary *di = [NSDictionary dictionary];

//    NSDictionary *d = [NSDictionary dictionaryWithObject:@"lai" forKey:@"name"];

//    NSDictionary *i = [NSDictionary dictionaryWithObjectsAndKeys:@"zhi",@"key",@"zhi",@"key1", nil];

//    NSMutableDictionary *m = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"zhi1",@"key",@"zhi",@"key1", nil];

//    NSString *i =[m objectForKey:@"key1"];

//    NSLog(@"%@",i);

//    for (NSString *key in DIc) {

//        NSLog(@"%@----%@",key ,[DIc objectForKey:key]);

//    }

//    for (NSString *key in DIc) {

//        NSLog(@"%@----%@",key ,DIc[key]);

//    }

//    //初始化并且赋一个值

//    NSDictionary *l = [NSDictionary dictionaryWithObject:@"zhi" forKey:@"key"];

//    NSLog(@"%@",l);

    

    //可变的字典 不可以直接赋值

    //

//    NSMutableDictionary *dic = [NSMutableDictionary dictionary];

//    [dic setObject:@"neirong" forKey:@"nei"];

//    [dic setValue:@"ne"forKey:@"1"];

//   

//    //   如果添加相同的key 会覆盖相同的key的内容

//   // [dic removeObjectForKey:@"1"];

//    

//    [dic removeObjectsForKeys:@[@"1",@"nei"]];//keys 表示key的数组

//    

//    

//  //  修改就是跟添加一样

//    [dic setObject:@"yitian" forKey:@"yigeyue"];

//  //  NSLog(@"%@",[dic objectForKey:@"yigeyue"]);

//   // object  allkey

//    [dic allKeys];

//    

    /*

    回顾:

    一、字典:key - 对应存在的 数据集合

    字典是根据 key 来取值

    key 在字典里面 是唯一的

    

    二、字典的赋值和初始化

    1、直接赋值

    NSDictionary *dic = @{@"key":@"",@"key1":@""};

    直接取值:dic[@"key"]

    2、初始化

    NSDictionary *dic = [[NSDictionary alloc]init];

    NSDictionary *dic = [NSDictionary dictionary];

    NSDictionary *dic1 = [NSDictionary dictionaryWithObject:@"zhi" forKey:@"key"];

    NSDictionary *dic1 = [NSDictionary dictionaryWithObjectsAndKeys:@"zhi",@"key", nil];

    

    三、通过方法 取值:

    [字典名 objectForKey:@"key"];

    

    获得字典里面所有的值allValues

    获得字典里面所有的键allKeys

    

    

    四、可变字典:

    可变字典的初始化 也不可以使用直接赋值@{};

    不可变字典的初始化方法  可变字典都可以使用

    1、添加一对元素

    [字典名 setObject:zhi forKey:key];

    2、删除元素

    删除一个元素:[字典名 removeObjectForKey:@"key"];

    删除多个元素:[字典名 removeObjectsForKeys:key的数组];

    删除全部元素:[字典名 removeAllObjects];

    

    3、替换 存在这个key就是替换  就是改变已经有key存在的值,

    [字典名 setObject:zhi forKey:key];

    

    4、查找

    通过key查找

    字典名[key];

    [字典名 objectForKey:@"key"];

    */

    

#pragma mark 第六节 属性构造函数

    //属性  某个事物的特征

//    - (void)setName:(NSString *)name;

//    - (NSString *)gerName;

//setter:设置者

//- (void)setName:(NSString *)name;

//getter:获取者

//setter的公式:

//    - (void)set属性名:(属性类型)形参名

 //getter的公式:

    //-(属性类型) 属性名;

   // . 点语法也叫属性  可以通过.属性 赋值 取值

   // 属性的公式: .h文件中@property 属性的类型 属性名;表示声明属性的方法 以前还要在.m文件 @synthesize  表示实现属性的方法

    //现在@property 包含了声明和实现两部分

    //@property 属性的类型 属性名;

    //构造方法:init(构造一个对象,对象是个空的)

    //自定义  构造方法:

    //1.公式:

//    -(id)init{

//        

//        self = [super init];

//        if (self) {

//            

//        }

//        return self;

//      }

//    -(id)initWith 要初始的名字:(数据类型)形参名 要初始的名字:(数据类型)形参名{

        //

        //        self = [super init];

        //        if (self) {

        //    _power = power;

    //_name = name;

        //        }

        //        return self;

        //      }

    //2.本质 就是一个有参数有返回值方法 但是自定义构造函数表示创建一个对象的方法 标识它有特殊意义的符号:(1)方法名 必须用initWith做为开头 并且W大写 2)方法的实现公式:

    //        self = [super init];

    //        if (self) {

    //        }

    //        return self;

//为什么要用属性(随时)正向传值   目的是传值  为什么使用自定义构造方法(初始化一个对象)目的是传值  初始化时赋值

  //  Hero *guanghui = [[Hero alloc]init];

    

  //  Hero *shuaiGe = [[Hero alloc]initWithPower:100 name:@"帅哥"];

  //  NSLog(@"%@",guanghui.name);

   // NSLog(@"%d",shuaiGe.power);

//    [guanghui setName:@"光辉"];

//    [guanghui setInjure:1000];

//    [guanghui setBlood:2000];

//    [guanghui setDef:300];

   // NSLog(@"英雄名字是%@攻击力%d%d血量防御力为%d",[guanghui getName],[guanghui getInjure],[guanghui getBlood],[guanghui getDef]);

//    

//    guanghui.name = @"zhubajie";

//   // NSLog(@"%@",guanghui.getName);

//    NSLog(@"%@",guanghui.name);

//    guanghui.injure = 100;

//    guanghui.blood = 1000;

//    guanghui.def = 200;

//    

//    

//    Flower *meigui = [[Flower alloc]init];

//    Flower *guiHua = [[Flower alloc]init];

//    Flower *meiHua = [[Flower alloc]init];

//    

//    meigui.pinzhong = @"珍贵";

//    meigui.color = @"红色";

//    meigui.smell = @"十里飘香";

//    meigui.price = 200;

//    

//    

//    guiHua.pinzhong = @"普通";

//    guiHua.color = @"白色";

//    guiHua.smell = @"百里飘香";

//    guiHua.price = 100;

//    

//    

//    meiHua.pinzhong = @"稀有";

//    meiHua.color = @"黄色";

//    meiHua.smell = @"千里飘香";

//    meiHua.price = 50;

    

    /*

     花类:品种 颜色 价格  气味

     3种花:1、玫瑰花  2、桂花  3、梅花

     */

//    NSArray *flowerDatas = @[@{@"name":@"玫瑰",@"price":@99,@"color":@"红色",@"flavour":@"很香"},@{@"name":@"桂花",@"price":@90,@"color":@"黄色",@"flavour":@"漫天香"},@{@"name":@"梅花",@"price":@100,@"color":@"红色",@"flavour":@"不是很香"}];

//    

//    NSMutableArray *flowers = [NSMutableArray array];

//    for (int i = 0; i<flowerDatas.count; i++) {

//        Flower *flower = [[Flower alloc]init];

//        flower.name = flowerDatas[i][@"name"];

//        flower.price = [flowerDatas[i][@"price"] intValue];

//        flower.flavour = flowerDatas[i][@"flavour"];

//        flower.color = flowerDatas[i][@"color"];

//        [flowers addObject:flower];

//    }

//    

//    for (Flower *flower in flowers) {

//        NSLog(@"%@ %@ %@ %d",flower.name,flower.flavour,flower.color,flower.price);

//   }

    

 #pragma mark 第七节 继承,封装,多态  ->  面向对象语言的三大特征

    //oc->多继承?没有多继承只能多级继承  cage

// 封装就是把所有共性的东西放到一起(类的特征放在一个类的)

    //封装的好处:代码清晰,模块化 方便使用 减少代码量,复用性高 便于维护

//继承:子类,父类

    //1.父类有的方法 子类可以使用

    //2.父类的属性 子类可以使用

    //父类所有公开的方法和属性,子类都可以使用

    //子类独有的方法属性,父类不能使用

    //同一种方法不同的实现叫多态

    //不知道具体对象名时,可以用self代替

//    YellowPerson *xiaoYang = [[YellowPerson alloc]init];

//    [xiaoYang eat] ;

//    xiaoYang.color = @"黄色皮肤";

//    BlackPerson *Bruce = [[BlackPerson alloc]init];


    

#pragma mark 第八节 内存管理

    //?学习内存管理 因为一个app超过30M,系统会向app 放送memory warning消息,接到这个信息又不该正,则苹果系统会让这个app出错 或者泄露 或者崩溃

    //程序运行时,内存空间是有限的,oc所编写的程序需要实例化对象,对象要占用内存,如果创建对象,而不去释放内存,将发生内存泄露。需要手动管理内存。

    //管理内存:1.分配内存2.释放内存(谁分配谁释放)

    //在不需要这个对象时,及时消掉就可以防止内存泄露(光分配不释放)

    //不知道怎么判断是否释放一个对象?  引用计数:判断一个对象是否存在的标准  公式:对象名.retainCount

    //什么样的数据需要我们手动管理内存  基本数据类型(不能成为对象,单一的一个数据,字母、数字)不用我们手动管理,是系统自动处理  (系统自动开辟的内存分配到栈除了基本数据类型都需要手动管理内存(程序员管理) (程序员开辟的内存分配到堆)

//    int a= 1200;分配到栈

//    Person* b = [[Person alloc]init];分配到堆

    //retainCount 引用计数>0时,就是对象存在的时候 <0说明这个对象已经被释放了

    

    //生命周期:1.创建的时候(alloc)就是对象存在的时候  2.具体对对象的操作  3.释放对象

    //引用计数是判断一个对象是否存在的标准(>0)

    

    //让引用计数+1的方法:

    //1.alloc new(创建)

    //2.retain (保留)

    //3.copy(拷贝)

    //让引用计数-1的方法:

    //release (释放)

    //autorelease(延迟释放)

    //MRC 手动管理引用计数

    //ARC 自动管理引用计数

    //对象被释放的时候会调用一个销毁的方法delloc——>销毁对象

    //有一个allocretaincopy 就要对应有一个release才能释放对象

   //retain 给同一个对象保留引用计数

    //目的为了保证一个不会被释放掉 给这个对象引用计数+1

    

    

    

    

    

//    Person *person = [[Person alloc]init];

//    Person *p =[person retain] ;

//    //如果一个对象被释放掉 这个对象就是野指针 为了防止使用野指针 可以在这个对象释放后赋值为nil

//  //  NSLog(@"%ld",p.retainCount);

//    [person release];

//    person= p;

//    NSLog(@"%ld",person.retainCount);

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    

    return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值