NSString 类介绍及用法
本小节知识点:
- 【掌握】NSString常见方法
- 【掌握】NSString字符串长度计算
1.NSString常见方法
NSString是 Objective-C 中核心处理字符串的类之一
创建常量字符串,注意使用“@“符号。
NSString *astring = @"This is a String!";
创建空字符串,给予赋值。
NSString *string = [NSString new]; string = @"This is a String!";
创建格式化字符串:占位符(由一个%加一个字符组成)
[NSString stringWithFormat:@"豪哥%i岁了", 24];
2.NSString字符串长度计算
- 通过调用NSString类的对象方法 length 可以获得字符串的长度
字符串长度是指该字符串中一共有多个字符(无论是中文还是英文)
纯英文字符
NSString *str = @"cdh"; NSLog(@"length = %i", [str length]); 输出结果:3
中英文混合
NSString *str = @"cdh陈"; NSLog(@"length = %i", [str length]); 输出结果:4
纯中文
NSString *str = @"陈德豪"; NSLog(@"length = %i", [str length]); 输出结果:3
NSUInteger 就是 unsigned long 源码: typedef unsigned long NSUInteger;
问题1.如何创建OC字符串?
NSString *str = @"cdh";
printf("age = %i, height = %f\n", 30, 1.75);
NSString *str = [NSString stringWithFormat:@"age = %i, height = %f\n", 30, 1.75];
NSLog(@"str = %@", str);
问题2 如何计算字符串的长度?
char name[] = "cdh";
char name[] = "chen";
// 包含\0
size_t size = sizeof(name);
printf("size = %lu\n", size);
// 不包含\0
size_t length = strlen(name);
printf("length = %lu\n", length);
// 不包含\0的
// 计算出来的是个数, 而不是占用的字节数
NSString *str1 = @"cdh";
NSString *str2 = @"陈德豪";
NSUInteger len = [str2 length];
NSLog(@"len = %lu", len);
问题3:OC中%@ 是做什么用的?
答:输出OC的字符串使用%@, %@就专门用于输出对象类型的
问题4:如何计算字符串的长度?
答:OC中调用length方法,计算字符的个数, 而不是占用的字节数
结构体成员变量
本小节知识点:
- 【掌握】结构体成员变量
1.结构体成员变量
设计一个”学生“类 1> 属性
* 姓名
* 生日
用结构体作为类的实例变量(生日)
typedef struct {
int year;
int month;
int day;
} Date;
结构体作为对象属性
@interface Person : NSObject
{
@public
NSString *_name;//定义姓名
Date _birthday;//定义生日
}
@end
@implementation Person
@end
int main(int argc, const char * argv[]) {
Person *p = [Person new];
p->_name = @"sb";
//因为结构体已经初始化为0了,在次初始化就报错了,但是可以逐个赋值。
//p->_birthday = {1990,12,3};
//方法一:强制转换
stu->_birthday = (Date){1986, 1, 15};
//方法二:定义一个新的结构体,给d赋值,将d赋值给_birthday
Date d = {1986, 1, 15};
stu->_birthday = d;
//方法三:分别赋值
stu->_birthday.year = 1986;
stu->_birthday.month = 1;
stu->_birthday.day = 15;
NSLog(@"%@的生日是:%d年%d月%d 日",p->_name,p->_birthday.year,p->_birthday.month,p->_birthday.day);
return 0;
}
问题:如何将作为属性的结构体进行初始化?
方法一:强制转换
方法二:定义一个新的结构体,给d赋值,将d赋值给_birthday
方法三:分别赋值
对象和方法之间的关系
本小节知识点:
- 【掌握】对象作为方法的参数
- 【掌握】对象作为方法的返回值
1.对象作为方法的参数
- 对象作为方法参数传递是地址传递,因为对象是一个指针变量
- 在方法内部,可以通过对象形参,访问该对象的成员变量(如果该对象的该成员变量的访问权限是public的)
- 在方法内部,可以通过对象形参,调用该对象上的方法(给这个对象发送消息),这个和函数指针类似
- 对象也可以作为方法的参数连续传递
2.对象作为方法的返回值
- 对象可以作为方法的返回值;
- 对象返回值的实质是返回指向该对象的指针,该对象是存储在堆内存中的。
- 由于堆内存是由程序员管理的,所以它不会因为函数结束而被销毁
多文件开发
写过嵌入式的或者其他编程项目都知道多文件开发的好处是不言而喻的!下面直接上问题:
问题1:为什么要使用多文件?
一个iOS项目可能会有多个人开发,如果多个人同时修改一个文件,那么就很可能会产生冲突,比如这个增加一个方法,那个人把这方法删掉了。另外就是当把多个人写功能合并起来的时候,也非常困难,写到一个文件中,无法顺畅的进行团队合作
问题2:OC中如何进行多文件开发?
- 在工作中,通常把不同的类放到不同的文件中,每个类的声明和实现分开
- 声明写在.h头文件中,
- 实现写在相应的.m文件中去,
- 类名是什么,文件名就是什么
问题3:使用多文件开发有什么好处?
- 显著提高团队协作的效率
- 提高程序的开发速度
- 提高程序的可维护性
- 提高代码的可读性
#pragma mark指令
本小节知识点:
- 【了解】#pragma mark指令的使用
1.#pragma mark指令的使用
功能:简单来说就是对代码的分组,方便代码查找和导航用的 它们告诉Xcode编译器,要在编辑器窗格顶部的方法和函数弹出菜单中将代码分隔开。一些类(尤其是一些控制器类)可能很长,方法和函数弹出菜单可以便于代码导航。此时加入#pragma 指令(#pragma是一个编译指令)对代码进行逻辑组织很有效果。
一个类里我们总会有一些方法的功能与性质是相差不多的,你可能会有把方法们分组的想法。Xcode已经有了类似的支持,它就是 #pragma mark。
- 分组: #pragma mark 分组(标识)名称
- 分隔线: #pragma mark -
- 分割线加分组: #pragma mark - 分组(标识)名称
Xcode模板修改/文档安装
本小节知识点:
- Xcode模板修改以及main函数的内容
- 修改OC文件头部的描述信息
- Xcode文档安装
- 开启、关闭显示隐藏文件(经常用)
1. 修改项目模板以及main函数中的内容
修改方法
略;
修改文件路径:
/Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates/Project Templates/Mac/Application/Command Line Tool.xctemplate/
2.修改OC文件头部的描述信息
修改方法
略;
文件路径:
/Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates/File Templates/Source/Cocoa Class.xctemplate
3.Xcode文档安装的位置
安装方法:
略
安装的位置1:
/Applications/Xcode.app/Contents/Developer/Documentation/DocSets
注意: 拷贝之前最好将默认的文档删除, 因为如果同时存在高版本和低版本的文档, 那么低版本的不会显示;
安装的位置2:
/Users/你的用户名/Library/Developer/Shared/Documentation/DocSets
注意: 如果没有该文件夹可以自己创建一个;
4.开启、关闭显示隐藏文件(经常用)
打开显示隐藏文件
- 打开终端,输入以下命令,然后重启一下finder即可;
defaults write com.apple.finder AppleShowAllFiles -bool true 或 defaults write com.apple.finder AppleShowAllFiles YES 或 defaults write com.apple.finder AppleShowAllFiles yes
关闭显示隐藏文件
- 打开终端,输入以下命令,然后重启一下finder即可;
defaults write com.apple.finder AppleShowAllFiles -bool false 或 defaults write com.apple.finder AppleShowAllFiles NO 或 defaults write com.apple.finder AppleShowAllFiles no
总结
1. OC字符串创建、输出、以及字符个数
- 使用NSString
- OC字符串是对象,所以是要使用指针 NSString *
- OC字符串赋值是 @”“
- OC字符串取值输出是 %@
- OC中调用length方法,计算字符的个数, 而不是占用的字节数
2. 结构体作为属性是进行初始化
方法一:强制转换
方法二:定义一个新的结构体,给d赋值,将d赋值给该属性
方法三:分别赋值
3. 多文件开发
略;
4.#pargma mark指令应用
- 分组: #pragma mark 分组(标识)名称
- 分隔线: #pragma mark -
- 分割线加分组: #pragma mark - 分组(标识)名称
5.匿名对象的使用
- 应用场景:
- 只需要使用一次
- 作为参数(实参)传递