最简单的IOS
来源:互联网 发布:域名属于知识产权吗 编辑:程序博客网 时间:2024/06/05 08:03
1.框架:就是系统(苹果)或者第三方(其他的一些高手)事先写好了一些很牛X功能的类.
把这些类交给我们使用.这些类的集合我们叫做框架.
框架中有很多很多功能相似的类.函数库
Foundation框架: 是1个包这里面有很多类、函数、定义了一些数据类型.
这个框架中的类都是一些最基础的类. NSString NSObject
其他的框架都是基于Foundation框架的.
UIKit.
AVFoundation.
......
2. Foundation框架中的最常用的类.简单的爆.量大.
3. NSString
1). NSString是1个数据类型.保存OC字符串的.
NSString的本质是1个类.既然是1个类.
所以,最标准的创建NSString对象的方式:
NSString *str1 = [NSString new];
NSString *str2 = [[NSString alloc] init];
NSString *str3 = [NSString string];
使用这种方式创建的字符串是1个空的字符. @""
NSString对象就是用来存储字符串.
2). NSString是OC中最常用的1个类了.所以OC提供了一种更为快速的创建字符串对象的方式.
使用前缀@
@"jack"; 本质上这是1个NSString对象.这个NSString对象中存储的是"jack"这个字符串.
NSString *str1 = @"rose";
1). @"rose"本质上是1个NSString对象,这个对象中存储的是字符串"rose".
2). 将这个字符串对象的地址返回赋值给str1指针.
格式控制符%p:打印指针变量的值.打印地址.
%@: 打印指针指向的对象.
4. NSString的恒定性.
1).当我们使用简要的创建字符串对象的时候.也就是使用1个OC字符串常量来初始化字符串指针的时候.
这个字符串对象是存储在常量区(数据段)的.
NSString *str = @"jack";
当我们调用NSString的类方法来创建对象的时候.
NSString *str = [NSString stringWithFormar:@"jack"];
NSString *str1 = [NSString new];
创建的字符串对象是存储在堆区.
2).当在内存中创建1个字符串对象以后.这个字符串对象的内容就无法更改.
当我们重新为字符串指针初始化值的时候.并不是修改原来的字符串对象
而是重新的创建1个字符串对象将这个字符串对象的地址重新复制给字符串指针变量.
3).当系统准备要在内存中创建字符串对象的时候.会先检查内存中是否有相同内容的字符串对象.
如果有,直接指向.如果没有才会重新创建.
4).存储在常量区的数据不会被回收.所以存储在常量区的字符串对象也不会被回收.
5. NSString是1个类.那么肯定其中有很多的方法.
6.使用频率最最高的几个方法.
1). 使用拼接的方式创建1个NSString对象.
+ (instancetype)stringWithFormat:(NSString *)format, ...
2). 得到字符串的长度.
@property (readonly) NSUInteger length;
3).得到字符串中指定下标的字符.
- (unichar)characterAtIndex:(NSUInteger)index;
返回值是unichar类型的要打印的话使用%C
4).判断两个字符串的内容是否相同.
a. 能否使用 ==来判断两个OC字符串的内容是否相同.
b. ==运算符的作用:比较左右两边的数据是否相同.
-> 10 == 10 这个时候直接比较的是左右两边的数据是否相同.
-> a == b 两边也可以写1个变量.这个时候比较是左右两边的变量的值是否相同.
-> 如果两边是1个指针变量.那么比较的也是变量的值.只不过指针变量的值是地址.
c.所以,如果我们要比较两个OC字符串的内容是否相同.不能使用 == 去比较.
因为 ==比较的是字符串指针变量的值.而我们要比的是两个字符串指针指向的字符串对象的内容是否相同.
c. 调用方法:
- (BOOL)isEqualToString:(NSString *)aString;
就可以比较当前字符串对象和传入的字符串对象的内容是否相同.
5).将C语言的字符串转换为OC字符串对象.
+ (instancetype)stringWithString:(NSString *)string;
6).将OC字符串对象转换为C语言的字符串.
@property (nullable, readonly) __strong const char *UTF8String
7.将字符串写入到指定的文件中.
- (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile encoding:(NSStringEncoding)enc error:(NSError **)error;
8.将文件中的内容读取到字符串中.
+ (nullable instancetype)stringWithContentsOfFile:(NSString *)path encoding:(NSStringEncoding)enc error:(NSError **)error;
nullable 代表返回的对象有可能是nil
9. 使用NSURL读写资源.
1). NSURL对象.专门用来保存资源地址的.资源地址:本地磁盘路径、网页地址、ftp文件地址.
2). 资源路径的地址的写法:
http:// 开头的是网页路径的写法.
file:// 开头的是本地磁盘的路径
ftp:// 开头的是ftp文件资源的路径
如果要讲1个资源路径的地址保存到NSURL对象中地址一定要是标准写法.
3). 如何将资源地址存储到NSURL对象中.
NSURL *url1 = [NSURL URLWithString:@"http://www.itcast.cn"];
NSURL *url2 = [NSURL URLWithString:@"ftp://server.itcast.cn/ccc.txt"];
NSURL *url3 = [NSURL URLWithString:@"file:///Users/Apple/Desktop/abc.txt"];
4).字符串就提供了对应的方法去读写NSURL对象中封装的资源路径
从指定资源路径读取文本内容.
+ (nullable instancetype)stringWithContentsOfURL:(NSURL *)url encoding:(NSStringEncoding)enc error:(NSError **)error;
将字符串的内容写入到资源路径中.
- (BOOL)writeToURL:(NSURL *)url atomically:(BOOL)useAuxiliaryFile encoding:(NSStringEncoding)enc error:(NSError **)error;
如果要向网页或者ftp写内容要有权限.
9. 字符串比较.
- (NSComparisonResult)compare:(NSString *)string;
10.字符串比较:忽略大小写的比较:
11.字符串的相等判断.
12.判断字符串是否以指定的字符串开头
- (BOOL)hasPrefix:(NSString *)str;
13.判断字符串是否以指定的字符串结尾
- (BOOL)hasSuffix:(NSString *)str;
14.在主串中搜索子串.从前往后
- (NSRange)rangeOfString:(NSString *)searchString;
返回值是1个NSRange类型的结构体变量.
typedef struct _NSRange {
NSUInteger location;代表子串在主串出现的下标.
NSUInteger length;代表子串在主串中匹配的长度.
} NSRange;
如果没有找到:
location 为NSUInteger的最大值,也就是NSNotFound
length 的值为0
这个方法,是从前往后搜索.第1次匹配的子串.
15.在主串中搜索子串.从后往前.
NSString *str = @"i love itcast love!";
NSRange range = [str rangeOfString:@"love" options:NSBackwardsSearch];
16. NSRange结构体.
1). 是Foundation框架中定义的1个结构体.
typedef struct _NSRange {
NSUInteger location;
NSUInteger length;
} NSRange;
NSRange range;
这个结构体变量一般情况下用来表示1段范围.特别用在子串在主串中的范围表示.
@"hahajackhehe" @"jack"
4 4
NSRange range = {4, 4};
2).声明并初始化结构体变量的方式.
1). 最原始的方式.
NSRange range;
range.location = 3;
range.length = 4;
2). 第二种方式: NSRange range = {3, 7};
3). 第三种方式: NSRange range = {.location = 3,.length = 7};
4). Foundation框架中定义了1个函数.这个函数可以快速的创建1个NSRange结构体会,
NSRange range = NSMakeRange(loc, len);
返回1个指定属性的NSRange结构体变量.
5). Foundation框架中定义了1个函数可以将1个NSRange结构体变量转换为NSString
NSStringFromRange(ran)函数可以将NSRange结构体变量转换为指定格式的字符串.
17. 字符串的截取.
取到字符串中的1部分.
- (NSString *)substringFromIndex:(NSUInteger)from;从指定的下标出一直截取到最后.
- (NSString *)substringToIndex:(NSUInteger)to;从第0个开始截取指定的个数.
- (NSString *)substringWithRange:(NSRange)range;截取指定的1段范围.
18.字符串的替换
- (NSString *)stringByReplacingOccurrencesOfString:(NSString *)target withString:(NSString *)replacement
将字符串中第1个参数替换为第2个参数.友情提示:原来的指针指向字符串的内容是不会变的 会全部替换.
新串是以方法的返回值返回的.
这个方法还可以做删除.原理:将其替换为@""
19.字符串数据转换为其他的类型.使用频率很高.
@property (readonly) double doubleValue;
@property (readonly) float floatValue;
@property (readonly) int intValue;
@property (readonly) NSInteger integerValue
@property (readonly) long long longLongValue
@property (readonly) BOOL boolValue
转换注意.从头开始转换,能转换多少就是多少.到遇到不能转换的时候就停止转换.
20.去掉字符串前后的空格.
str = [str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
中间的空格无法去掉.
21.字符串的恒定性.
一旦创建1个字符串对象,那么这个字符串对象的内容就无法更改,当我们修改字符串的时候,其实是重新的创建了1个字符串对象.
代码案例:
NSLog(@"-------------------");
NSString *str = @""; //@""
for(int i = 0; i < 50000; i++)
{
str = [NSString stringWithFormat:@"%@%d",str,i];
}
NSLog(@"-------------------");
会耗费很长的时间.每次循环的时候都会创建1个新的字符串对象.50000个,
因为字符串的恒定性.
22.如何让这样的大批量的字符串拼接可以更加快速的1点.
1).慢得原因:因为字符串的恒定性,每次修改字符串的时候,是重新的创建1个对象,
2).希望:有没有一种对象是用来存储字符串的,并且存储在这个对象中的字符串数据可以更改.
23. NSMutableString
1). 是Foundation框架中的1个类.从NSString继承.
所以,NSMutableString对象是用来存储字符串数据的.
2). NSMutbaleString在父类NSString的基础之上的做扩展.
存储在NSSMutableString对象中的字符串数据可以更改.具备可变性.
直接可以改存储在NSMutableStirng对象中的字符串数据,不会新创建对象.
24. NSMutableString的用法
1).既然是1个类,要使用的话,就得创建1个对象.
NSMutableString *str = [NSMutableString string];
2).往可变字符串对象中追加字符串.
- (void)appendString:(NSString *)aString; 直接追加内容.
- (void)appendFormat:(NSString *)format, ...以拼接的方式往可变字符串对象中追加内容.
3). 创建NSMutableString对象的时候,记住下面这样的初始化方式是不行的.
NSMutableString *str = @"jack";
@"jack" 是1个NSString对象,是1个父类对象.
而str指针是1个NSMutableString类型的是1个子类类型的.
如果通过子类指针去调用子类独有的成员就会运行错误.
4). NSMutableString从NSString继承.
在使用NSString的地方完全可以使用NSMutableString
25. 使用NSMutableString来做大批量的字符串拼接.
NSLog(@"~~~~~~~~~~~~");
NSMutableString *str = [NSMutableString string];
for(int i = 0; i < 100000; i++)
{
[str appendFormat:@"%d",i];
}
NSLog(@"~~~~~~~~~~~~");
这个时候 "biu"的一下就结束了.为什么这么快>?因为NSMutableString只有1个.每次修改的时候直接修改的是这个对象中的数据.
26. 使用建议
1). 我们平时使用的时候,还是使用NSString.因为效率高.
NSString *str1 = @"jack";
NSString *str2 = @"jack";
2). NSMutbaleString:只在做大批量的字符串拼接的时候才使用.
大量拼接的时候,就不要去使用NSString因为效率低下.\
10次以上.
- 最简单的IOS
- 最简单的IOS
- 最简单的IOS
- 最简单的IOS
- 最简单的IOS
- 最简单的IOS
- 最简单的IOS
- 最简单的IOS
- 最简单的IOS
- 最简单的IOS
- iOS 最简单的资料
- 最简单的IOS 分类
- IOS:ios最简单的控件练习
- iOS-实现最简单的画线功能
- iOS: 最简单的Table View
- iOS: 最简单的splash screen实现
- ios下最简单的正则,RegexKitLite
- ios下最简单的正则,RegexKitLite
- 字符串的排列
- 枚举
- 使用MyEclipse开发Java EE应用:如何配置一个独立的Java项目
- hdu 4719 Oh My Holy FFF(dp线段树优化)
- The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
- 最简单的IOS
- maven中手动将jar包安装进仓库的方法及问题
- “破局”——2017庆科信息IOT解决方案发布会
- JS实现导航栏项目自动切换标签样式
- [数论] 拓展欧几里得算法 (poj1061 青蛙的约会)
- Test-简单加个背景音乐试一下
- 9、链式哈希表
- leetcode--Minimum Path Sum
- Python入门记录