黑马程序猿————OC在Foundation框架结构和字符串
------<a href="http://www.itheima.com" target="blank">Java火车、Android火车、iOS火车、.Net火车</a>、我们期待与您的沟通!
-------
Foundation框架中包括了非常多开发中经常使用的数据类型,比方。结构体,字符串。集合类等。是其它iOS框架的基础。
假设想要使用Foundation框架的数据类型,那么仅仅要包括它的
头文件就能够了。即#import<Foundation/Foundation.h>
Foundation中经常使用的结构体:
在foundation框架中,经常使用的结构体有四种:
NSRange
NSPoint\CGpoint
NSSize\CGSize
NSRect\CGRect
NSRange: 表示范围(location length)
NSRange的定义:位置和长度
typedef struct _NSRange {
NSUInteger location;
NSUInteger length;
} NSRange;
NSRange的基本使用:
// @"i love oc" //love的范围
NSRange r1 = {2,4}; //可读性比較差,开发中一般不用
NSRange r2 = {.location = 2, .length = 4}; //不用 //实际开发中最经常使用的是使用Foundation自带的函数。例如以下:
NSRange r3 = NSMakeRange(2, 4); //要求掌握 //字符串创建最快的方式
NSString *str = @"i love oc"; //rangeOfString查找某个字符串的范围,查找love的范围
//假设找不到,length= 0,location = NSNotFound == -1
NSRange range = [str rangeOfString:@"love"];
//打印出来
NSLog(@"loc = %ld,length = %ld",range.location,range.length);
NSPoint\CGPoint:(表示坐标)
NSPoint和CGPoint是一样的。开发中经经常使用CGPoint
typedef CGPoint NSPoint;
struct CGPoint {
CGFloat x;
CGFloat y; //CGFloat类型。实际就是double
};
typedef struct CGPoint CGPoint;
NSPoint\CGPoint的使用:
//开发中CGPoint经常使用,由于他是跨平台的
//创建结构体变量
NSPoint p1 = CGPointMake(10, 10); //最经常使用
CGPoint p2 = NSMakePoint(10, 10);
NSSize\CGSize:(表示UI元素的尺寸,宽度和高度)
使用方法基本和NSPoint一样
typedef CGSize NSSize;
struct CGSize {
CGFloat width;
CGFloat height;
};
typedef struct CGSize CGSize;
NSSize\CGSize的基本使用:
//创建结构体变量
NSSize s1 = CGSizeMake(100, 50);
NSSize s2 = NSMakeSize(100, 50);
CGSize s3 = NSMakeSize(200, 100);
NSRect\CGRect:(表示一个UI元素的位置和尺寸 CGPoint CGSize)
typedef CGRect NSRect;
struct CGRect {
CGPoint origin;
CGSize size;
};
typedef struct CGRect CGRect;
基本使用:
//创建结构体变量
//方式一
CGRect r1 = CGRectMake(0, 0, 50, 100);
//方式二
CGRect r2 = {{0,0},{50,100}};
//方式三
CGRect r3 = {p1 ,s2}; CGRect r4 = {CGPointZero,CGSizeMake(50, 100)}; //表示原点,开发中常常常使用
//CGPointZero ==CGPointMake(0, 0); // //常规的使用方式:
// CGRect myRect(CGFloat x,CGFloat y,CGFloat width,CGFloat height)
// {
// CGRect rect;
// rect.origin.x = x;
// rect.origin.y = y;
// rect.size.width = width;
// rect.size.height = height;
//
// return rect;
// }
//开发中常常是先把结构体转成字符串,然后再打印
//结构体转换为字符串的方式。要求掌握
//NSString *str = NSStringFromPoint(p1); //把坐标转换成字符串
//NSString *str = NSStringFromSize(s3); //吧尺寸转换成字符串
NSString *str = NSStringFromRect(r1); //把位置和尺寸转换成字符串的形式打印
NSLog(@"%@",str);
//尝试打印,此方式比較麻烦。开发中不使用
// NSLog(@"x = %f,y = %f ,width = %f,height = %f ",r1.origin.x,r1.origin.y,r1.size.width,r1.size.height);
Foundation 框架中一些经经常使用到的结构体函数:
使用这些函数的前提是加入CoreGraphics框架
//比較两个点的位置是否同样 (x 、y)
BOOL b = <span style="color:#ff0000;"> CGPointEqualToPoint(CGPointMake(10, 10), CGPointMake(10, 10));
//比較两块区域是否同样]
CGRectEqualToRect(<#CGRect rect1#>, <#CGRect rect2#>)
//比較两个尺寸是否同样
CGSizeEqualToSize(<#CGSize size1#>, <#CGSize size2#>)
//推断这个点是否在区域范围内
// x(50,100) y(40,90)
BOOL b2 = CGRectContainsPoint(CGRectMake(50, 40, 1010, 50), CGPointMake(60, 40)); NSLog(@"%d",b2);
NSString:
NSString :不可变字符串
NSMutableString :可变字符串
字符串的创建方式:
//字符串的创建
NSString *s1 = @"jack"; NSString *s2 = [[NSString alloc]initWithString:@"jack"]; //差点儿没人用 NSString *s3 = [[NSString alloc] initWithFormat:@"age is %d",10]; //C字符串 --> OC字符串
NSString *s4 = [[NSString alloc]initWithUTF8String:"jack"]; // OC字符串 --> C字符串
const char *cs = [s4 UTF8String]; // NSUTF8StringEncoding 用到中文就能够用这样的编码
// 读取文件内容的方法
NSString *s5 = [[NSString alloc]initWithContentsOfFile:@"/Users/mymac/Desktop/test/内存管理/总结.m" encoding:NSUTF8StringEncoding error:nil]; NSLog(@"\n%@",s5); //URL :资源路径
//协议头://路径
//(本地文件)file://
// ftp://
//http://weibo.com/a.png //NSURL *url = [[NSURL alloc]initWithString:@"file:///Users/mymac/Desktop/test/内存管理/总结.m"]; NSURL *url = [NSURL fileURLWithPath:@"//Users/mymac/Desktop/test/内存管理/总结.m"]; NSString *s6 = [[NSString alloc]initWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil]; NSLog(@"s6 = \n%@", s6); /*
创建字符串的时候通常也有一些类方法
一般都会有一个类方法跟对象方法配对,开发中常常使用类方法。非常少使用对象方法,以节省时间
[NSURL URLWithString:(NSString *)]; [NSString stringWithFormat:@""]; [NSString stringWithContentsOfFile:<#(NSString *)#> encoding:<#(NSStringEncoding)#> error:<#(NSError *__autoreleasing *)#>];
*/
字符串写到文件里的方式:
//字符串写到文件里的方法
[@"jack\njack" writeToFile:@"/Users/mymac/Desktop/test/内存管理/总结.m "atomically:YES encoding:NSUTF8StringEncoding error:nil]; NSString *str = @"rweudjkqsdjiw"; NSURL *url = [NSURL fileURLWithPath:@"/Users/mymac/Desktop/test/内存管理/总结.m"]; [str writeToFile:url atomically:YES encoding:NSUTF8StringEncoding error:nil];
可变字符串的使用:
//可变字符串的创建
NSMutableString *s1 = [NSMutableString stringWithFormat:@"age is 10"]; //拼接内容到S1的后面
[s1 appendFormat:@" 11 12"]; //获取is的范围
NSRange range = [s1 rangeOfString:@"is"]; [s1 deleteCharactersInRange:range]; //删除 NSString *s2 = [NSString stringWithFormat:@"age is 10"]; NSLog(@"s1 = %@,s2 = %@",s1,s2);
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS火车、.Net火车</a>、我们期待与您的沟通! -------
版权声明:本文博客原创文章,博客,未经同意,不得转载。
黑马程序猿————OC在Foundation框架结构和字符串的更多相关文章
- 黑马程序员——OC语言Foundation框架 (2) NSArray NSSet NSDictionary\NSMutableDictionary
Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)NSArray 1>NSArray :不可变数组 ①创建方法 ...
- 黑马程序员——OC语言Foundation框架 结构体
Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)结构体 NSRange(location length) NSPoi ...
- 黑马程序员——OC语言Foundation框架 NSArray NSSet NSDictionary\NSMutableDictionary
Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一) NSNumber 将各种基本数据类型包装成NSNumber对象 @ ...
- 黑马程序猿_Java 代理机制学习总结
-------<a href="http://www.itheima.com/"">android培训</a>.<a href=" ...
- 黑马程序猿————Java基础日常笔记---反射与正則表達式
------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 黑马程序猿----Java基础日常笔记---反射与正則表達式 1.1反射 反射的理解和作用: 首 ...
- 黑马程序猿——25,打印流,合并流,对象序列化,管道流,RandomAccessFile
------<ahref="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培 ...
- 黑马程序猿——15,String,StringBuffer,基本数据类型包装对象
------<ahref="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培 ...
- 《Java程序猿面试笔试宝典》之字符串创建与存储的机制是什么
在Java语言中.字符串起着非常关键的数据.字符串的声明与初始化主要有例如以下两种情况:(1) 对于String s1=new String("abc")语句与String s2= ...
- 黑马程序猿_ 利用oc的协议实现代理模式
先说下代理模式是什么吧 定义: 为其它对象提供一种代理以控制对这个对象的訪问.在某些情况下,一个对象不适合或者不能直接引用还有一个对象 而代理对象能够在client和目标对象之间起到中介的作用. 在看 ...
随机推荐
- 以交互方式使用exp/imp的演示
众所周知,用exp/imp对数据库进行逻辑备份.包含表.用户,整个数据库,我们通常所熟悉的是使用命令行指定參数的方式来做的.以下我来演示一下不太经常使用的以交互方式的操作,操作非常easy.就是仅仅要 ...
- android录音功能的实现
这个录音实现是我在Bus上看到并下载的,他那个源码不完整,再次把我整理完整的代码贴出,源码地址在这:http://download.csdn.net/detail/chaozhung/5618649 ...
- asp.net2.0安全性(4)--Login系列控件--转载来自车老师
前面主要说了与安全相关的一系列的类,现在我们使用这些类就可以做出我们自己的安全系统了.其实微软的目的远不至于此,下面我们就来看一下微软为我们提供的Login系列控件. Login系列控件是微软为了简化 ...
- java泛型接口详解
/* * 泛型接口 */ interface Tool<T> { public void show(T t); //泛型方法 public <E> void print(E e ...
- 用Delphi实现Windows的鼠标钩子函数
Delphi是基于PASCAL语言的Windows编程工具,功能十分强大.然而在Delphi的帮助文件中,对Windows API函数的说明沿袭了 VC 的格式,和VC一样,对很多API函数的用法没有 ...
- boost::asio 连接管理11 如何关闭连接
在实际产品运行中,对连接管理有了更新的认识,这里分享一下. shared_ptr管理连接对象的生命周期 shared_ptr的引用计数器决定了连接对象的生命周期.这里我说的连接对象就是在我的前文:ht ...
- SQLiteLog (1) no such Column:
今天在进入sqlite数据库查询的时候出现了这个问题,SQLiteLog (1) no such Column: BGZ 搜索得知这是因为数据库中没有这一列,我的sql语句为" ...
- 男性在下一100层【第三层】——高仿手机银行client接口
前言: 从<男性在下一100层>系列博文[二楼]现在出版了整整三个月后,.从上述观点和这么多朋友的意见还是比较喜欢真实类的博文. 毕竟我们都叫"攻城狮".所以要看是否这 ...
- Servlet过滤器——日志记录过滤器
1.概述 在实际的项目开发过程中,经常需要在项目运行时,记录并在控制台中输出运行时的日志信息,便于查看项目的运行状况.本实例将介绍如何应用过滤器实现日志记录.运行本实例,将在控制台中输出项目运行时的日 ...
- android:改动PagerTabStrip中的背景颜色,标题字体的样式、颜色和图标以及指示条的颜色
1.改动PagerTabStrip中的背景颜色 我们在布局中直接设置background属性就可以: <android.support.v4.view.ViewPager android:id= ...