续写某坑爹公司的教学笔记-Foundation整套Day01-04

Day01:

Foundation框架

一、Foundation课程安排

1.NSObject、NSString、NSMutableString

2.NSNumber、NSValue、NSDate、NSArray NSMutableArray

3.NSArray的遍历、NSArray的新语法(IOS6)、NSArray Copy、NSArray排序

4.NSSet、NSMutableSet、NSDictionary、NSMutableDictionary、Block代码段(函数指针)


二、Api应用程序接口 文档(说明书)

Application Program Interface

三、Foundation简介

Foundation Framework OSX IOS 基本框架

类库(Class Library)

*基础类:

NSObject、NSString、NSMutableString

NSNumber、NSValue、NSDate…

*集合类:

NSArray、NSSet、NSMutableSet、 NSDictionary、NSMutableDictionary

网络类:…

文件类:...

四、NSObject

1.概述:所有类的父类,提供了系统运行时的一些基本功能。

2.类的初始化

a.类加载的时候,自动调用+load方法

b.当第一次使用类时,自动调用+initialize方法

c.类在使用之前会执行此方法,且只会执行一次

3.对象的创建和释放

alloc init dealloc new([[xxx alloc]init])

4.-copy

a.并不是所有对象都有copy方法,如果一个对象支持copy功能,首先要遵守协议NSCopying协议,必须实现copyWithZone方法。

b.如果不但想复制对象,而且还要复制对象的值,一般还要重写有参的初始化方法。

5.类对象

a.类实例化变成对象,类的对象。(堆)

b.类加载到内存中并创建类在内存中的对象(代码区),类对象。

c.普通的类不占堆内存空间,类对象是占代码区空间的。

d.向类发送class消息,可以创建类对象。

Class class = [TRStudent class];

e.比较“类”信息的时候,需要使用类对象,判断一个类是否是另一个类的子类。

[TRPerson isSubclassOfClass:[TRStudent class]]

f.避免多态使用时的不安全性问题

6.方法选择器 @selector

a.和C语言中的函数指针相类似

b.SEL就是方法的类型 sel方法变量

SEL sel = @selector(study);

c.某个类是否存在某个方法(消息)

BOOL b = [TRStudent instancesRespondToSelector:@selector(study)]

d.可以向对象发送任何消息,而不需要在编译的时候声明这些消息

[stu2 performSelector:sel2];

与普通向对象发送消息区别:编译器不会验证是否声明该方法,直接向对象发送消息,最好验证一下对像是否存在该消息,以保证代码的安全性。

7.协议选择器

a.协议的引用指向一个协议

Protocol* p = @protocol(NSCopying);

b.可以判断一个类是否遵守了某个协议

BOOL b = [TRStudent conformsToProtocol:p];

8.其它方法

a.判断一个引用指向的对象是否是某种类型或子类型

-(BOOL)isKindOfClass:(Class)c;

b.判断一个引用(实例)指向的对象是否是某种类型

-(BOOL)isMemberOfClass:(Class)c;

c.比较类信息的时候,需要使用类对象,判断一个类是否是另一个类的子类

+(BOOL)isSubclassOfClass:(Class)c;

练习:

1.定义三个类,TRAnimal、TRDog、TRCat。

TRDog与TRCat继承TRAnimal。

a.TRAnimal有属性age,有一个eat能力(显示 age属性的值,并输出调用了eat方法)

b.创建一个TRDog对象,且属性值为5

c.复制该对象<验证是遵守NSCopying>,向第二个TRDog对象performSelector发送消息(eat)<判断对象是否含有eat消息或是否继承TRAnimal>。

(注:安全性有几种判断方式?方法、本类、本类或子类、子类)


五、NSString

1.在C语言中,是没有专门的字符串类型,我们是通过字符数组来实现一个字符串。

2.在OC中专门的类型来描述字符串类型,NSString。

3.字符串比较特殊,遵循一个"不变模式",一个字符串一但创建,字符串对象就不可以改变,不可改变的字符串是可以重复使用的,所以相同值的字符串对象,一般只会创建一个对象。

4.有些字符串存在常量值中(代码区),有些字符串直接存在堆区。

5.字符串的使用

  a.字符串创建

1)空字符串 NSString* str = [[NSString alloc]init];

2)字符串在创建的时候,如果已经存在,不会创建新的字符串。NSString* str = @"Hello";

     NSString* str2 = @"Hello";

     3)按指定格式来创建字符串

  NSString* str3 = [NSString stringWithFormat:@"%@ World",str];

      4)如果使用stringWithFormat方法创建的字符串,就算内容相同,地址也不一样。

5)通过文件内容创建字符串,注意存在编码集的问题,默认为ASC(不包含中文),要指定相应的中文编码集(GBK简体中文、GB2312简体中文、BIG5繁体中文、UTF8全世界主流语言…)

参数1 文件的路径 

参数2 指定文件的编码集

参数3 出现异常处理

NSString* str7 = [NSString stringWithContentsOfFile:@"/Users/apple/Desktop/testString" encoding:NSUTF8StringEncoding error:nil]

b.字符串的比较 判断等值

1)str==str1 XXX  

==只能判断两个字符串是否指向了同一个对象,(引用的地址是否相同)不能判断两个字符串的内容是否相同。

2)判断两个字符串值是否相同,isEqualToString方法,比较当前字符串与对应字符串值是否相同,严格区分大小写的。

c.比较字符串的大小

      通常在字符串排序的时候,需要用到比较字符串的小。

            1)compare方法可以比较两个字符串,比较字符串中的字符的ASC码的值

            2)返回值有三种结果 NSComparetionResult

NSOrderedSame 两者相等 0

NSOrderedAscending后者比前者大 -1升序

NSOrderedDecending前者比后者大 1降序

d.忽略大小写比较字符串

            1)caseInsensitiveCompare这个方法

            2)在验证码功能的时候,会用到此方法

六、NSMutableString 可变字符串

可以改变字符串内容的功能,它是NSString的子类。

1.初始化

a.空字符串 有意义

     NSMutableString* str = [[NSMutableString alloc]init];

   b.创建字面值 无意义

     不建议用此方式创建可变字符串,字面值字符串的内容,在代码区是无法改变的

    NSMutableString* str2 = @"abc";

2.修改字符串的内容

     a.在指定位置 添加新的字符串

 参数1 添加的字符串内容

 参数2 添加的字符串在原字符串中的位置

      注:下标是从0开始计算

[str3 insertString:@"123" atIndex:1];

b.可以替换指定位置的字符串

   NSRange range={1,3};//位置,长度

   [str3 replaceCharactersInRange:range withString:@"bcd"];

c.删除指定位置的字符串,后面的字符串会向前补齐

[str3 deleteCharactersInRange:range];

3.两个字符串对象的操作

     a.追加字符串

      NSMutableString* str4 = [NSMutableString stringWithString:@"abc123"];

      [str4 appendString:@"bcd"];

b.按照指定格式追加字符串

 [str4 appendFormat:@"123%@bcd",@"def"];


4.截取字符串

a.从指定下标开始,包含开始位置截取字符串

subStringFromIndex

从中间到最后

b.0开始,到指定位置,不包含指定位置

subStringToIndex

从开始到中间

c.指定范围截取字符串

subStringWithRange

NSRange range = {location,length};

5.字符串大小写转换

a.将所有的字符串内容变为大写字母

uppercaseString

b.将所有的字符串内容变为小写字母

lowercaseString

c.将单词的首字母大写

capitalizedString

6.得到字符串的前缀和后缀 

TRStudent.h 前缀(TR)和后缀(.h)

如果一个字符串是文件名,那么可以得到这个字符串的前缀和后缀。

a.判断一个文件是否有某个前缀

BOOL b = [str hasPrefix:@"TR"];

b.判断一个文件是否有某个后缀

BOOL b = [str hasSuffix:@".h"];


根据身份证号码,求出生年月日?

230119197007010000


————————

Day02:

一、NSNumber数值对象

在很多类使用的时候,如果使用数值,就需要将数值转换成对象类型,而基本数据类型是无法使用的,所以说我们就要封装基本数据类型变为对象类型,数字对象的常用处理方式和使用与基本数据类型无差别。

1.数字对象的初始化

          //封装

    int i = 10;//基本数据类型

    //对象类型

    NSNumber* number = [NSNumber numberWithInt:i];

2.数字对象转换为基本数据类型

    //解封

    int i2 =[number intValue];

二、NSValue

1.有时需要创建一个对象,以密切反应原始数据类型或者数据结构,这种情况就需要使用NSValue类,它可以将任何C中有效的变量类型封装成对象类型。

2.NSNumber是NSValue的子类

3.使用NSValue封装一个结构体

a.定义一个结构体类型

typedef struct _Point{

    int x;

    int y;

}Point2;

b.声明一个结构变量并且赋值

Point2 point;

        point.x = 10;

        point.y = 20;

c.通过NSValue类,将结构类型封装成NSValue对象

参数1 结构体变量的内存地址

     参数2 内存地址对应的结构体类型

        NSValue* value = [NSValue valueWithBytes:&point objCType:@encode(Point2)];

d.把结构体对象转换成结构体类型

Point2 point2;

        [value getValue:&point2];


1.将基本数据类型intcharfloatdouble分别封装成对象类型,输出其值。

2.将对象类型,拆封变为基本数据类型,输出其值。


三、NSDate 日期

1.NSDate存储的是时间信息,默认存储的是世界标准时间(UTC),输出时需要根据时区转换为本地时间。中国大陆、香港、澳门、台湾…的时间增均与UTC时间差为+8,也就是UTC+8。

2.初始化 得到当前的时间

   NSDate* date = [[NSDate alloc]init];

3.得到一个时间,和当前比延迟30

   NSDate* date2 = [NSDate dateWithTimeIntervalSinceNow:30];

4.和时间对比 返回秒数

        NSTimeInterval second = [date timeIntervalSince1970];

5.比较两个时间 哪个更早

        NSDate* earlierDate = [date earlierDate:date2];  

6.比较两个时间 哪个更晚

        NSDate* laterDate = [date laterDate:date2];

7.将世界标准时间转换成当地时间

8.UTC时间转换为当地时间

    a.创建模板对象

        NSDateFormatter* dateFormatter

        =[[NSDateFormatter alloc]init];

        //hh12小时制mm分钟ss HH24小时制

        //MMddyyyy

        dateFormatter.dateFormat = @"yyyy-MM-dd hh:mm:ss";

    b.通过模板对象 将时间对象转换成字符串

        NSString* strDate = [dateFormatter stringFromDate:date];


根据身份证号码,求出生年月日,年龄?(subString…字符串截取)

230119197007010000


四、NSArray 数组

1.概述

    数组是一组有序的集合,通过索引下标取到数组中的各个元素,与字符串相同,数组也有可变数组(NSMutableArray)和不可变数组(NSArray),数组中不可以保存基本数据类型、结构体数据类型,需要使用NSNumber和NSValue进行数据"封装"。


2.初始化方法

a.空数组

      NSArray* array = [NSArray array];

    b.数组中只有一个元素

  NSArray* array2 = [NSArray arrayWithObject:@"one"];

    c.数组中有多个元素

        NSArray* array3 = [NSArray arrayWithObjects:@"one",@"two",@"three", nil];

2.初始化方法

d.通过一个已有的数组 创建新的数组

  NSArray* array4 = [NSArray arrayWithArray:array3];

3.数组的常用方法

  a.数组的长度

NSUInteger length = [array4 count];

  b.通过数组的下标得到数组中元素

NSString* objStr = [array4 objectAtIndex:0];


3.数组的常用方法

c.遍历数组

for (int i = 0; i<[array4 count]; i++) {

NSString* str = [array4 objectAtIndex:i];

}


练习:

1.向数组中存放数据,

int i = 10;char c = 'a';

BOOL b = YES

TRStudent age:18 name:zhangsan; 

当前的系统时间

2.遍历输出数组对象。


练习:

1.创建一个学生类TRStudent,有年龄、有姓名,创建五个学生对象,放到数组中,遍历数组,输出学生的姓名和年龄。

2.查询(遍历)五个学生信息,只显示姓名为zhangsan的信息。

3.只显示年龄为18岁学生的信息。

四、NSArray 数组

4.在原来数组上添加一组对象并创建新的数组

NSArray* array4 = [array arrayByAddingObjectsFromArray:array2];

5.在原来数组上加一个数组对象并创建新的数组 

NSArray* array3 = [array arrayByAddingObject:array2];

6.将数组中的元素按指定符号连接起来变为字符串。

        NSString* arrayStr = [array4 componentsJoinedByString:@":"];

7.将字符串拆分成数组

NSArray* stringArray = [arrayStr componentsSeparatedByString:@":"];

8.判断数组中是否包含某个对象,返回值是布尔值类型

     BOOL b = [stringArray containsObject:@"5"];

9.获取某个对象在数组的下标,如果数组中不存在该对象,则返回一个垃圾值下标

     NSUInteger index = [stringArray indexOfObject:@"5"];

10.获取数组中最后一个元素

        NSString* lastObject = [stringArray lastObject];

11.如果数组中保存某个对象,给数组中所有该对象发送一个消息,数组中的所有对象必须拥有该消息。

存在安全性问题 慎用

        [students makeObjectsPerformSelector:@selector(study)];

练习:

        第一位  第二位

判断ip:155.155.100.100属于哪个城市?

第一位 0~100,第二位 0~100 广州

第一位 101~200,第二位 0~101 北京

第一位 101~200,第二位 101~200 上海

NSString* str = [array1 componentsJoinedByString:@"."];

        NSLog(@"str:%@",str);

NSArray* stringArray = [arrayStr componentsSeparatedByString:@":"];


学生->班级->学院->学校

8个      4个       2个     1个

a.查询(遍历)所有学生信息。

b.只显示姓名为zhangsan的信息。

c.只显示年龄为18岁学生的信息。

d.如果每个学生有本书,所有学生书的名称(名称、价格)。


————————

Day03:

四、NSMutableArray(可变数组)

1.初始化方法

NSMutableArray* array = [NSMutableArray array];

NSMutableArray* array2 = [NSMutableArray arrayWithObjects:@"one",@"two",@"three", nil];

2.向数组中添加一个元素

        [array2 addObject:@"1"];

3.向数组中添加一个元素在指定位置

        [array2 insertObject:@"2" atIndex:2];

        NSLog(@"array2:%@",array2);

4.删除数组中指定下标元素

        [array2 removeObjectAtIndex:1];

5.删除指定对象

        [array2 removeObject:@"1"];

6.替换指定下标的元素

   参数1 下标 参数2 替换的内容

        [array2 replaceObjectAtIndex:1 withObject:@"two"];

        NSLog(@"array2:%@",array2);

7.删除数组所有元素

        [array2 removeAllObjects];

        NSLog(@"array2:%@",array2);

五、遍历(三种遍历)

1.for循环遍历(老方式)

2.***快速枚举 效率高

for (NSString* str in array) {

   NSLog(@"str:%@",str);

}

3.迭代器遍历

a.每个数组或集合都有一个自己的迭代器

NSEnumerator* enumerator = [array objectEnumerator];

b.每次迭代时要发送消息

[enumerator nextObject]) 

1)返回当前指向数组中的对象,并且自动向下移动一位

  2)如果没有对象时,则返回nil,并且终止迭代。

while (obj = [enumerator nextObject])

五、NSArray支持的新语法

1.ios6.0osx10.8之后,编译器LLVM支持

2.初始化数据

  C:int array[]={1,2,3};

  OC:[NSArray arrayWithObjects:@"a",@"b",nil];

  OC新:NSArray* array = @[@"a",@"b"];

3.根据下标得到数组中的元素的值

  OC:[array objectAtIndex:0];

  OC新:array[0];

六、数组复制(深拷贝(内容复制)、浅拷贝(引用复制))

1.复制对象:指针复制(浅拷贝)、内容复制(深拷贝

2.数组中的元素,对象的引用。

3.浅拷贝:新数组和原有数组共享内存中的对象。

NSArray* array2 = [[NSArray alloc]initWithArray:array copyItems:NO];   

4.深拷贝:新数组和原有数组都有独享的对象。

NSArray* array3 = [[NSArray alloc]initWithArray:array copyItems:YES];

六、数组的排序

1.可以让数组对象按着一定规则进行排序

2.类必须实现compare方法(排序规则)

3.规则原理:

返回值有三种结果 NSComparetionResult

NSOrderedSame 两者相等 0

NSOrderedAscending后者比前者大 -1升序

  NSOrderedDecending前者比后者大 1降序

4.发送排序的消息

NSArray* array2 = [array sortedArrayUsingSelector:sel];


1.创建五个学生对象,按姓名排序。

2.按年龄排序升序、降序。

3.先年龄升序再按姓名升序(年龄相等的人,再按姓名排序)。


一、NSSet集合

1.概念

NSSet是一个无序的,管理多个对象的集合类,最大特点是集合中不允许出现重复对象,和数学上的集合含义是一样的。

除了无序、不许重复之外,其它功能和NSArray是一样的。

2.重复

什么叫重复(一样)?

a.同一个对象

b.两个对象信息值相同

计算机认为的一样:同一个对象。

3.对象的哈希值(hash)

a.Set中确定对象是否是重复的?例如A对象和B对象,先调用A对象的hash方法得到一个整数,再调用B对象的hash方法得到一个整数,如果整数不相同,计算机就认为两个对象是不同的对象。(没有重复)

b.重写hash方法,如果hash值相同,此时会再调用对象的isEqual方法,再次判断两个对象是否相同。

  1)对象类型

//自反性

    if(self == object){

        return YES;

    //类型

    }else if (object isMemberOfClass:[TRStudent class]){

        ...//判断对象中的每一个属性的值

    }else{

        return NO;

    }

2)对象中每一个属性

//判断对象中每一个属性的值

    TRStudent* stu2 = object;

   if ([self.name isEqualToString:stu2.name]) {

            return YES;

        }


创建TRPoint类,有两个属性x,y值。

创建三个对象放到NSSet集合中。

point1(3,5) point2(3,6) point3(3,5)

遍历NSSet集合,使用快速枚举、迭代器。


4.遍历

   a.快速枚举

for (TRPoint* point in points) {

    NSLog(@"point x:%d y:%d",point.x,point.y);

        }

4.遍历

   b.迭代器

        NSEnumerator* enumerator=[points objectEnumerator];

        TRPoint* obj;

        while (obj = [enumerator nextObject]) {

            NSLog(@"NSEnumerator point x:%d y:%d",obj.x,obj.y);

        }


NSSet NSMutableSet(重构)

学生->班级->学院->学校

8个      4个       2个     1个

a.查询(遍历)所有学生信息,只显示姓名为zhangsan的信息。

b.只显示年龄为18岁学生的信息。


————————

Day04:

二、字典 NSDictionary NSMutableDictionary

1.概念

a.是由键-值对组合的集合,正如,我在查询字典的单词的定义一样。Key-vale

b.通过key(键),相应的value(值)。通常来讲,key的值是字符串类型,value的值是任意对象类型。

c.key值是不允许重复的,value的值是可以重复的。

d.通来来讲key与value的值,不允许为空

    e.可以保存多条数据。

2.集合的使用

a.初始化

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

     初始化时,会依次添加元素的valuekey

     NSDictionary* dic2 = [NSDictionary dictionaryWithObjectsAndKeys:@"4",@"four",@"3",@"three",@"2",@"two",@"1",@"one", nil];

    b.如果key重复,会舍掉后面的,编译不会报错。

3.向集合中添加元素 NSMutableDictionary

添加一个元素

   [dic2 setValue:@"5" forKey:@"five"];

4.查找集合中的元素

    NSString* value = [dic2 objectForKey:@"three"];

5.得到所有key

    NSArray* keys = [dic2 allKeys];

6.遍历

NSArray* keys = [dic2 allKeys];

for (NSString* key in keys) {

   NSString* value = [dic2 objectForKey:key];

   NSLog(@"key:%@->value:%@",key,value);

        }


NSDictionary NSMutableDictionary(重构)

学生->班级(Set)->学院(Dic)->学校(Dic)

8个      4个           2个            1个    

    1.查询某个班的学生信息

    2.查询某个学院的学生信息

3.查询某个学生的信息










  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值