黑马程序员---Foundation---可变与不可变对象

------iOS培训、Java培训、Android培训, iOS学习型技术博客,期待与您交流------

/*

NSString : 不可变字符串

NSMutableString : 可变字符串

*/

NSString

// OC字符串NSString的创建

void createNSString()

{

/*

字符串的创建方式1 ---  对象方法initWithxxx

*/

NSString *s1 = @"Peak";

//    NSString *s2 = [[NSString alloc] initWithString:@"Peak"];

NSString *s3 = [[NSString alloc] initWithFormat:@"Peak"];

NSString *s4 = [[NSString alloc] initWithFormat:@"name is %@, age is %d", @"Peak", 25];

// C语言字符串--->OC字符串

NSString *s5 = [[NSString alloc] initWithUTF8String:"Peak"];

// OC字符串--->C语言字符串

char *str= [s5 UTF8String];

// 从文件(绝对路径/)中读取内容,返回OC字符串

// NSUTF8StringEncoding 用到中文使用这种编码  如果获取不到内容,返回(null) 可以换不同的编码进行尝试

NSString *s6 = [[NSString alloc] initWithContentsOfFile:@"/Users/Mac/Desktop/a.txt" encoding:NSUTF16StringEncoding error:nil];

// URL : 资源路径   协议头://路径

// 网络 http://

// 本地 file://绝对路径  (3个/)

// ftp://

NSURL *url = [[NSURL alloc] initWithString:@"http://baidu.com"];

NSString *s7 = [[NSString alloc] initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];

/*

字符串的创建方式2 ---  对象方法相应的类方法stringWithxxx

一般都有一个类方法和对象方法配对

类方法名一般以类名(类名With)开头

*/

NSString *s8 = [NSString stringWithFormat:@"Peak"];

NSString *s9 = [NSString stringWithFormat:@"name is %@, age is %d", @"Peak", 25];

NSString *s10 = [NSString stringWithContentsOfFile:@"/Users/Mac/Desktop/a.txt" encoding:NSUTF16StringEncoding error:nil];

NSURL *url2 = [NSURL URLWithString:@"http://sougou.com"];  // NSURL的类方法URLWithxxx

NSURL *url3 = [NSURL fileURLWithPath:@"/Users/Mac/Desktop/Mac快捷键.txt"];   //  文件名可以有中文

//    NSURL *url4 = [NSURL URLWithString:@"file:///Users/Mac/Desktop/Mac快捷键.txt"];    // 文件名不能有中文

NSString *s11 = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];

NSLog(@"\n%@", s11);

}

// 把OC字符串NSString写出去(写到文件)

void writeTo()

{

// 把OC字符串写到一个文件中,如果该文件不存在,就自动创建该文件

[@"Hello Peak" writeToFile:@"/Users/Mac/Desktop/a.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil];

NSURL *url = [NSURL fileURLWithPath:@"/Users/Mac/Desktop/aa.txt"];

NSURL *url2 = [NSURL URLWithString:@"file:///Users/Mac/Desktop/a.txt"];    // 文件名有中文不行

NSString *s = [NSString stringWithContentsOfURL:url2 encoding:NSUTF8StringEncoding error:nil];

[@"Hello World" writeToURL:url atomically:YES encoding:NSUTF8StringEncoding error:nil];

NSLog(@"%@", s);

}

NSArray(有序)

OC数组NSArray只能存放OC对象,不能存放非OC对象类型,比如int、struct、enum。。。

当把一个对象放入数组中,该对象的计数器会+1,也就是说 数组会对该对象做一次retain操作

当数组被销毁时,会自动对里面的所有元素对象做一次release---数组里所有元素的计数器-1

/*

OC数组只能存放OC对象

NSArray : 不可变数组

NSMutableArray : 可变数组

*/

void baseUseNSArray()

{

// NSArray是不可变数组,意味着 a1永远是空数组

NSArray *a1 = [NSArray array];

// nil是数组元素结束的标记,不能省略

NSArray *a2 = [NSArray arrayWithObjects:@"Peak", @"heima", nil];

//    NSLog(@"%@", a2[0]);   // a2[1] 编译器会自动转为 [a2 objectAtIndex:1]

// 快速创建一个NSArray对象

NSArray *array = @[ @"Hello", @"Peak", @"heima"];  // 编译器特性,会自动将代码转换

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

// 遍历数组元素1   id obj代表数组a3中的每一个元素

for (id obj in array)

{

NSUInteger i = [array indexOfObject:obj];   // 返回对象obj在数组array中的索引位置

NSLog(@"array[%ld] = %@", i, obj);

}

// 遍历数组元素2 ---推荐使用

// 每遍历到一个元素,就会 调用 一次block,

// 并且把当前元素和索引位置当做参数传递给block

[array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop)

{

//        if (1 == idx) {

//            *stop = YES;

//        }

*stop = YES;  // 停止遍历

NSLog(@"array[%ld] = %@", idx, obj);  // obj为数组每个元素对象, idx为元素索引

*stop = NO;   // 不停止遍历

}];

}

NSDictionary(键值对 排列 无序———直接用@"%@"打印是按照key的abc排序打印 键值对)

void baseUseNSDictionary()

{

NSDictionary *dict = [NSDictionary dictionaryWithObject:@"Peak" forKey:@"name"];

NSArray *keys = @[@"name", @"address"];

NSArray *objs = @[@"Peak", @"浙江"];

NSDictionary *dict2 = [NSDictionary dictionaryWithObjects:objs forKeys:keys];

/* 可读性不好

NSDictionary *dict3 = [NSDictionary dictionaryWithObjectsAndKeys:

@"Peak", @"name",

@"浙江", @"address",

@"18600000000", @"phone",

@"Peak", @"name2",

@"浙江", @"address2",

@"18600000000", @"phone2",

nil];

*/

// 编译器特性: 快速创建 一个NSDictionary对象

NSDictionary *dict3 = @{@"name": @"Peak",

@"address": @"浙江"};

// 编译器特性:  快速访问某个键值对(快速根据一个key访问相应的object)

id obj = dict3[@"name"];   // 编译器会自动转为---等价于 [dict3 objectForKey:@"name"]

NSLog(@"%@", dict3);

NSLog(@"%@", obj);

NSLog(@"%@", [dict3 objectForKey:@"address"]);

// NSMutableDictionary的使用

NSMutableDictionary *dict = [NSMutableDictionary dictionary];

// 添加键值对

[dict setObject:@"Peak" forKey:@"name"];

NSLog(@"%@", dict);

}

Foundation---集合类总结

1. NSArray\NSMutableArray

* 有序

* 快速创建(不可变)   @[obj1, obj2, obj3, …...];

* 快速访问元素  数组对象名[i];

2. NSSet\NSMutableSet

* 无序

3. NSDictionary\NSMutableDictionary

* 无序

* 快速创建(不可变)   @{key1 : object1,  key2 : object2, …...};

* 快速访问元素    字典对象名 key];

时间: 2024-11-07 22:11:15

黑马程序员---Foundation---可变与不可变对象的相关文章

黑马程序员——Foundation学习笔记(NSSet和NSMutableSet)

==========android培训.ios培训.java培训.期待与您交流========== 一.NSSet: NSSet NSSet里面存储的元素没有顺序,NSArray中的元素有顺序. NSSet *s = [NSSet set]; // 创建一个空的Set,永远是空,不可变. NSSet *s2 = [NSSet setWithObjects:@"jack",@"rose",nil]; NSString *str = [s2 anyObject]; //

黑马程序员_JavaScript变量转换和Jquery对象的转换

在实际编程过程中,有很多对字符串进行判断.拆分.比较.转换类型.校验等操作,下面我会总结下JavaScript变量转换和Jquery对象的转换. 1.JavaScript 变量转换及字符串操作 1.字符串变成int类型 使用函数:parseInt(); 使用此函数,可将string类型变量转换为int类型.而且只能够对string类型变量使用.如果待转换string类型变量无发转换为int类型时,函数会返回NaN. 实例如下: var v_Num = parseInt('256ok'); //

黑马程序员--Foundation框架之--NSArray类以及它的子类NSMutableArray类

今天我们继续来看一下Foundation框架中的NSArray类和 NSMutableArray类,NSArray类 是不可变的,NSMutableArray类是可变的. 一.NSArray类 NSArray中不可以存放基本数据类型,只能存放类的实例,如果需要将基本类型.结构体放入到数组中得话,需要通过NSNumber/NSValue进行数据的封装 同时不能在NSArray中存储nil // // main.m // 16_NSArray // // Created by waterfoxjie

黑马程序员--Foundation框架之--NSString类以及它的子类NSMutableString类

继续看一下Foundation框架中的常用对象:NSString和NSMutableString 在OC中NSString对象是不可变的,和Java中的String一样的,而NSMutableString是可变的,和Java中的StringBuilder一样. 一.NSString对象 在OC中,NSString对象是非常重要的一个对象,也是最基础的一个对象,是用来处理字符串的常用类. 下面来看一下NSString的一些方法的使用: 1.创建的方法 // 字符串的创建方式 NSString *s

黑马程序员——Foundation框架的小总结

一.Foundation框架—结构体 一.基本知识 Foundation框架中包含了很多开发中常用的数据类型,如结构体,枚举,类等,是其他ios框架的基础. 如果要想使用foundation框架中的数据类型,那么包含它的主头文件就可以了.即#import<foundation/foundation.h> 补充:core foundation框架相对底层,里面的代码几乎都是c语言的,而foundation中是OC的. 二.常用的结构体介绍及简单使用 常用的结构体: (一)NSRang的基本使用

黑马程序员-Foundation框架之数组和字典

一.Foundation框架简介 Foundation框架,顾名思义就是基础框架.基础框架上的类都是与用户界面无关的,为所有的程序开发提供一个基础.OC的基础框架常用的类包括:数组,字典,数字,字符串等以及它们的子类.要使用这个框架需要在引入头文件#import <Foundation/Foundation.h> 二.数组 NSArray类以及它的子类NSMutableArray,一个是不可变数组,一个是可变数组.下面通过代码来看一下它的一些基本的用法. 1 #import <Found

黑马程序员--Foundation框架之--NSDirctionary类以及它的子类NSMutableDirctionary类

------IOS培训期待与您交流! ------- 今天来看一下Foundation框架中的NSDirctionary 类,NSMutableDirctionary类,OC中叫字典,字典是无序的,这个和NSArray不一样. 一.NSDirctionary类 1.创建方法 // 字典的创建 NSArray *array1 = [NSArray arrayWithObjects:@"zhangsan",@"zhangfei", nil nil]; NSArray *

黑马程序员------Foundation框架中各种牛瓣数据类型

-----iOS培训.Android培训.Java培训,期待与您交流----- 一.NSRange.NSPoint\CGPoint. NSSize\CGSize.NSRect\CGRect (CGPint CGSize)结构体 1)NSRange NSRange表示一个范围,比如我们想求个@"I fall in love with Objective-C~";  这个字符串中"love"的表示范围就是位置从11开始,长度为4: NSRange的本质是一个结构体, 里

黑马程序员--Foundation框架之--NSObject类

OC中的Foundation框架是系统提供的,他就相当于是系统的一套api,其内部有很多现有的类和功能提供给我们使用. 那么今天首先来介绍一下Foundation框架中的第一个类NSObject. // // Person.h // 13_NSObjectMethod // // Created by waterfoxjie 15-03-31. // Copyright (c) 2015年 waterfoxjie. All rights reserved. // #import <Foundat