zoukankan      html  css  js  c++  java
  • 01-Foundation简介、NSObject、copy、NSString

    目录:

    一、Foundation常用类

    二、Foundation简介

    三、NSObject

    四、NSString

    回到顶部

    一、Foundation常用类

    1 NSObject、NSString、NSMutableString

    2 NSNumber、NSValue、NSDate、NSArray

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

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

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

    1 Api Application Program Interface

    回到顶部

    二、Foundation简介

    1 Foundation Framework OSX IOS基本框架

    类库(Class Library)

    基础类库:NSObject、NSString、NSMutableString

    NSNumber、NSValue、NSDate。。。

    集合类库:NSArray 、NSSet、NSMutableSet、NSDictionary、NSMutableDictionary

    网络类:。。。

    文件类:。。。

    回到顶部

    三、NSObject

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

    2 类的初始化

    * 类加载的时候会自动调用+load方法

    * 当第一次使用类时,自动调用+initalize方法

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

    3 对象的创建和释放

    4 copy

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

    * 如果想复制对象的同时还要复制对象的值,还要重写copyWithZone有参的初始化方法

    练习:创建一个Person类,有姓名,年龄,性别,工资,创建一个对象并且复制一个对象,且复制对象的值。

    练习:创建一个Book类,Person类拥有一本书,创建一个Person对象,第二个Person对象也拥有一本书,但是书不是共用一个对象。

    5 类对象

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

    * 类实例化变为对象,是类的对象

    * 把类加载到内存中并创建类在内存中的对象(堆),是类对象

    * 普通的类不占堆内存空间,类对象是占堆内存空间的

    * 向类发送class消息,可以创建类对象

    Class class= [Student class];

    * 判断一个类是否是另一个类的子类

    [Person isSubclassOfClass:[Student class]]

    * 使用类对象可以避免多态使用时的不安全问题

    6 方法选择器@selector

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

    * SEL是方法的类型 sel是方法的引用

     SEL sel = @selector(study);

    * 判断某个类是否存在某个方法

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

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

    performSelector:@selector(study)

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

    7 协议选择器

    * 协议的变量指向一个协议

    Protocol* p = @protocol(NSCopying)

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

    BOOL b = [Student conformsToProtocol:@protocol(NSCopying)]

    8 其他方法

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

    -(BOOL)isKindOfClass:(Class)c;

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

    -(BOOL)isMemberOfClass:(Class)c;

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

    +(BOOL)isSubclassOfClass:(Class)c;

    练习:定义三个类,Animal、Dog、Cat。Dog与Cat继承Animal。

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

    创建一个Dog对象,且属性值为5

    复制该对象,向第二个Dog对象performSelector发送消息(eat)

    注:安全性

    练习:定义两个类Person、SuperMan、定义两个协议Person(job)、Fly(fly),使用两个类创建两个对象,分别使用performSelector方式向两个对象发送job消息<是否遵守Person协议>,fly消息<释放遵守Fly协议>,怎么保证代码的安全性。

    回到顶部

    四、NSString

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

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

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

    4 有些字符串存在常量中(代码区),有些字符串直接存在堆区,OC的字符串存在堆区,因为在OC中字符串是对象,对象存在堆区

    5 字符串的使用

    * 字符串的创建

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

    * 字符串在创建的时候,如果已经存在,不会创建新的字符串

     NSString* str = @"abc"; NSString* str2 = @"abc";这两个字符串变量是一个地址

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

    * 通过文件内容创建字符串stringWithContentsOfFile,注意存在编码集的问题,默认ASC(不包含中文)要指定相应的中文编码集(GBK、GBK2313、BIG5繁体中文、UTF8)

    参数1 文件路径,参数2 指定文件编码,参数3 出现异常处理

    NSString* str5 = [NSString stringWithContentsOfFile:@"/Users/tarena/Desktop/test" encoding:NSUTF8StringEncoding error:nil];

    6 字符串的比较

    * str == str1;"=="只能判断两个字符串是否指向了同一个对象,也就是引用的地址是否相同,不能判断字符串的内容是否相同

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

    BOOL b5  = [str3 isEqualToString:str4];

    作业:创建两个文件,分别保存用户名、密码,创建两个数据库的用户名,密码,匹配登录信息,如果匹配显示登录成功,否则登录失败。

    7 比较字符串的大小

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

    * comepare方法可以比较两个字符串,比较字符串中的字符的ASCII码的值,返回值有三种结果NSComparisonResult定义

    :NSOrderedSame 代表相等 也就是数值0

    :NSOrderedAscending后者比前者大  代表升序 也就是数值 -1

    :NSOrderedDecending前者比后者大  代表降序 也就是数值 1

    * 忽略大小写比较字符串

    caselnsensitiveCompare这个方法忽略大小写,在验证码功能的时候会用到

    作业:上面的作用完成,加上验证码(验证码保存在文件中)

     

     

  • 相关阅读:
    解决Django和EasyUI搭配使用时出现的CSRF问题
    修改Django的默认打印时间
    解决多网卡SNMP获取不到数据的问题
    Django模板格式
    java操作excel
    数字1的个数
    leetcode:2. 两数相加(java)
    二叉树常用操作
    通配符匹配
    二叉树基本操作
  • 原文地址:https://www.cnblogs.com/yangmx/p/3493943.html
Copyright © 2011-2022 走看看