一.结构体
结构体只能在定义的时候进行初始化
给结构体属性赋值
+ 强制转换: 系统并不清楚是数组还是结构体,需要在值前面加上(结构体名称)
+定义一个新的结构体,进行直接赋值
+ 逐个赋值
注意点
+ 不要将进制间搞混
//因为结构体已经初始化为0了,再次初始化就报错了,但是可以逐个赋值。 //p->_birthday = {1990,12,3}; p->_birthday.year = 2014; p->_birthday.month = 05; p->_birthday.day = 12; NSLog(@"%@的生日是:%d年%d月%d 日",p->_name,p->_birthday.year,p->_birthday.month,p->_birthday.day); //也可以整体赋值 MyDate de={1993,11,11}; p->_birthday = de; NSLog(@"%@的生日是:%d年%d月%d 日",p->_name,p->_birthday.year,p->_birthday.month,p->_birthday.day);
二.匿名对象
没有名字的对象
+ [类名 new]->属性 = 值;
注意:
+ 无论对象有没有名字,只要调用new方法就会返回对象的地址
适用场景
+ 对象只使用一次
+ 匿名对象可以作为方法的实参
优点
+ 简化代码
---------------------------------------------------------------
三.OC多文件开发
1.为什么要使用多文件
一个真正的iOS项目中可能会有成百上类,如果这些类都写在一个文件中,那么文件就会很大,想找到自己需要类都变的异常困难,开发效率低下.
一个iOS项目可能会有多个人开发,如果多个人同时修改一个文件,那么就很可能会产生冲突,比如这个增加一个方法,那个人把这方法删掉了。另外就是当把多个人写功能合并起来的时候,也非常困难,写到一个文件中,无法顺畅的进行团队合作。
2.@interface和@implementation的分工
@interface就好像暴露在外面的时钟表面
@implementation就好像隐藏在时钟内部的构造实现
3.在OC中如何进行多文件开发?
在工作中,通常把不同的类放到不同的文件中,每个类的声明和实现分开
声明写在.h头文件中,
实现写在相应的.m文件中去,
类名是什么,文件名就是什么。
在主函数以及类的实现文件中要使用#import包含相应的头文件。
4.使用多文件开发好处
显著提高团队协作的效率
提高程序的开发速度
提高程序的可维护性
提高代码的可读性
--------------------------------------------------------
四.NSString
1.NSString常见方法
NSString是 Objective-C 中核心处理字符串的类之一
创建常量字符串,注意使用“@“符号。
创建空字符串,给予赋值。
创建格式化字符串:占位符(由一个%加一个字符组成)
[NSString stringWithFormat:@"小明%i岁了", 30];
2.NSString字符串长度计算
通过调用NSString类的对象方法 length 可以获得字符串的长度
字符串长度是指该字符串中一共有多个字符(无论是中文还是英文)
纯英文字符 NSString *str = @"hmj"; NSLog(@"length = %i", [str length]); 输出结果:3 中英文混合 NSString *str = @"hmj贺"; NSLog(@"length = %i", [str length]); 输出结果:4 纯中文 NSString *str = @"梦洁"; NSLog(@"length = %i", [str length]); 输出结果:3 NSUInteger 就是 unsigned long 源码: typedef unsigned long NSUInteger;
五.pragma mark
功能:简单来说就是对代码的分组,方便代码查找和导航用的它们告诉Xcode编译器,要在编辑器窗格顶部的方法和函数弹出菜单中将代码分隔开。一些类(尤其是一些控制器类)可能很长,方法和函数弹出菜单可以便于代码导航。此时加入#pragma指令(#pragma是一个编译指令)对代码进行逻辑组织很有效果。
一个类里我们总会有一些方法的功能与性质是相差不多的,你可能会有把方法们分组的想法。Xcode已经有了类似的支持,它就是 #pragma mark。
格式
分组: #pragma mark 分组(标识)名称
分隔线: #pragma mark -
分割线加分组: #pragma mark - 分组(标识)名称
---------------------------------------------------------------------
六.对象和方法的区别
1.对象作为方法的参数
对象作为方法参数传递是地址传递,因为对象是一个指针变量
在方法内部,可以通过对象形参,访问该对象的成员变量(如果该对象的该成员变量的访问权限是public的)
在方法内部,可以通过对象形参,调用该对象上的方法(给这个对象发送消息)
int main(int argc, const char * argv[]) { // 1.创建士兵对象 Soldier *s1 = [Soldier new]; s1->_name = @"jack"; s1->_life = 10; s1->_level = kSoldierLevel1; // 2.创建枪对象 Gun *gun = [Gun new]; gun->_bulletCount = 100; // 3.射击 [s1 fireByGun:gun]; } @implementation Soldier - (void)fireByGun:(Gun *)gun { [gun shoot]; } @end
2.对象作为方法的返回值
对象可以作为方法的返回值;
对象返回值的实质是返回指向该对象的指针,该对象是存储在堆内存中的。
由于堆内存是由程序员管理的,所以它不会因为函数结束而被销毁
@implementation Shop - (Gun *)buyGun { Gun *gun = [Gun new]; gun->_bulletCount = 100; return gun; } @end
七.修改项目模版
修改项目模板以及main函数中的内容
修改OC文件头部的描述信息
-------------------------------------------------------------------
八.Xcode文档安装
找到DocSets目录
拷贝文件到该目录
退出重新打开Xcode
注意: 如果文件夹中有版本更高的文档不会显示低版本文档
- 这里面的Reference、Release Notes、Sample Code、Technical Notes、Technical Q&A,一般来说只是备查的。主要要看的是Getting Started和Guides。