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

来源:互联网 发布:网络中级工程师报名费 编辑:程序博客网 时间:2024/06/11 01:31

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 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 硕士延期也不能毕业怎么办 硕士论文工作量太少被延期了怎么办 竞彩足球比赛延期中断怎么办? 竞彩足球输了怎么办 讯飞语音不兼容百度怎么办 虎牙直播不兼容语音怎么办 为什么手机打开游戏就死机怎么办 2007cad打开时时死机怎么办 手机qq总是无响应怎么办 英雄联盟登录服务器未响应怎么办 苹果7p照相死机怎么办 小米手机qq打不开怎么办啊 电脑qq老是闪退怎么办 微信摄像卡住了怎么办 电脑打开应用程序没反应怎么办 宇飞来手机锁了怎么办 宇飞来手机忘记密码怎么办 vivo手机突然开不了机怎么办 苹果六关不了机怎么办 微信老是无响应怎么办 打游戏被骂了怎么办 微信运动跳转排行榜失败怎么办 小恩爱账号忘了怎么办 华为账号更换后游戏账号怎么办 注册游戏账号需要身份证怎么办 英雄联盟被裁决了怎么办 百度网盘密码重置不了怎么办 sap密码输入被锁怎么办 dnf二级密码错10怎么办 大网卡网速慢了怎么办 小米路由器无线速度慢怎么办 小米手机无线速度慢怎么办 电脑网卡驱动没了怎么办 电脑显示网卡驱动不正常怎么办 微信别人拒收消息怎么办 电脑无线网卡速度慢怎么办 网吧吃鸡更新慢怎么办 手机号注册不了微信怎么办 小米账号密码忘了怎么办 小米手机账号密码忘了怎么办 华为手机账号密码忘记了怎么办