Objective C 基础01

2016-10-10  本文已影响0人  quantiza

基本数据类型

协议protocol

在ObjC中使用@protocol定义一组方法规范,实现此协议的类必须实现对应的方法。熟悉面向对象的童鞋都知道接口本身是对象行为描述的协议规范。

Fundation框架


一、什么是Cocoa

Cocoa不是一种编程语言(它可以运行多种编程语言),它也不是一个开发工具(通过命令行我们仍然可以开发Cocoa程序),它是创建Mac OS X和IOS程序的原生面向对象API,为这两者应用提供了编程环境。

我们通常称为“Cocoa框架”,事实上Cocoa本身是一个框架的集合,它包含了众多子框架,其中最重要的要数“Foundation”和“UIKit”。前者是框架的基础,和界面无关,其中包含了大量常用的API;后者是基础的UI类库,以后我们在IOS开发中会经常用到。这两个框架在系统中的位置如下图:

Cocoa框架

二、NSObject

所有的Mac OS X和IOS程序都是由大量的对象构成,而这些对象的根对象都是NSObject,NSObject就处在Foundation框架之中。通常我们会将他们分为几类:

  1. 值对象
  2. 集合
  3. 操作系统服务:文件系统、URL、进程通讯
  4. 通知
  5. 归档和序列化
  6. 表达式和条件判断
  7. Objective-C语言服务

三、常用结构体:NSRange、NSPoint、NSSize、NSRect等

常用结构体在Foundation框架中都有一个对应的make方法进行创建,这也是我们日后比较常用的操作;而且与之对应的还都有一个NSStringFromXX方法来进行字符串转换,方便我们调试。下面提到NSSize其实就是CGSize,NSRect其实就是CGRect.

  1. NSRange 表示一个范围

    • 定义: NSRange rg = {3, 5};
    • Make定义 NSRange rg = NSMakeRange(3,5);
    • 第一参数是起始位置第二个参数是长度: rg.location = 3; rg.length = 5;
  2. NSPoint 表示Cartesian坐标系中的一个点,typedef CGPoint NSPoint;

    • Make定义 NSPoint p = NSMakePoint(10, 15);
    • 或者使用CG方法定义 NSPoint p2 = CGPointMake(10, 15);
    • 两个参数分别表示x轴和y轴 p1.x = 10; p1.y = 15
  3. NSSize 表示一个二维的size, typedef CGSize NSSize;

    • 定义方法同上
    • NSSize s = NSMakeSize(10, 15);CGSize s2 = CGSizeMake(10, 15);
    • 两个参数width, height, s.width = 10; s.height = 15;
  4. NSRect 表示一个矩形, typedef CGRect NSRect;

    • 定义方法同上
    • NSRect r = NSMakeRect(10,5,100,200); NSRect r2 = CGRectMake(10,5,100,200);
    • 两个参数分别为NSPoint型的origin和NSSize型的size

四、日期:NSDate,NSTimeInterval,NSDateFormatter

Symbols

五、字符串

  1. 不可变字符串NSString
  1. 可变数组NSMutableString

    • 字符串定义
      NSMutableString *str1= [[NSMutableString alloc] initWithCapacity:10];
      [str1 setString:@"hello"];//设置字符串

    • 方法
      1) setString 设置
      [str1 setString:@"hello"];//设置字符串
      2) appendString 追加
      [str1 appendString:@",world!"];//追加字符串,结果:hello,world!
      3) appendFormat 格式化追加
      [str1 appendFormat:@"我的年龄是%i。dear,I love you.",18];
      4) replaceCharactersInRange:NSRange withString:NSString 替换
      NSRange range=[str1 rangeOfString:@"dear"];
      [str1 replaceCharactersInRange:range withString:@"Honey"];
      5) insertString:NSString atIndex: NSNumber插入字符串
      [str1 insertString:@"My name is Kenshin." atIndex:12];
      6) deleteCharactersInRange:NSRange 删除指定字符串
      [str1 deleteCharactersInRange:[str1 rangeOfString:@"My name is Kenshin."]];

六、数组

  1. 不可变数组NSArray

    • 定义

      //NSArray长度不可变所以初始化的时候就赋值,并且最后以nil结尾
      1) NSArray *array1 = [[NSArray alloc] initWithObjects:@"abc",obj,@"cde",@"opq", nil];
      2) NSArray *array1 = [NSArray arrayWithObjects:@"abc",obj,@"cde",@"opq",@25, nil];
      3) NSArray *array2 = @[@"abc",obj,@"cde",@"opq",@25];
         >#注意这里用@[]直接初始化数组,而直接初始化字典用@{},注意区分!!
      
    • 属性和方法

       1) count : NSLog(@"%zi",array1.count);//数组长度,结果:5
      #containsObject:
       2) NSLog(@"%i",[array1 containsObject:@"cde"]);//是否包含某个对象,结果:1
      #lastObject
       3) NSLog(@"%@",[array1 lastObject]);//最后一个对象,结果:25
      # indexOfObject:
       4) NSLog(@"%zi",[array1 indexOfObject:@"abc"]);//对象所在的位置:0
      
    • 数组遍历(待续.....)

    • 数组排序

      • 方法1,使用自带的比较器
        NSArray *array=[NSArray arrayWithObjects:@"3",@"1",@"2", nil];
        NSArray *array2= [array sortedArrayUsingSelector:@selector(compare:)];
      • 方法2,(待续。。。)
  1. 可变数组NSMutabelArray

七、字典

八、拆箱和装箱

  1. 简介

数组和字典中只能存储对象类型,其他基本类型和结构体是没有办法放到数组和字典中的。当然你也是无法给它们发送消息的(也就是说有些NSObject的方法是无法调用的),这个时候通常会用到装箱(boxing)和拆箱(unboxing)。其实各种高级语言基本上都有装箱和拆箱的过程,例如C#中我们将基本数据类型转化为Object就是一个装箱的过程,将这个Object对象转换为基本数据类型的过程就是拆箱,而且在C#中装箱的过程可以自动完成,基本数据类型可以直接赋值给Object对象。但是在ObjC中装箱的过程必须手动实现,ObjC不支持自动装箱。在ObjC中我们一般将基本数据类型装箱成NSNumber类型(当然它也是NSObject的子类,但是NSNumber不能对结构体装箱),调用其对应的方法进行转换。

1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1

上一篇 下一篇

猜你喜欢

热点阅读