OC中的结构体
一.结构体
结构体只能在定义的时候进行初始化
给结构体属性赋值
+ 强制转换: 系统并不清楚是数组还是结构体,需要在值前面加上(结构体名称)
+定义一个新的结构体,进行直接赋值
+ 逐个赋值
注意点
+ 不要将进制间搞混
//因为结构体已经初始化为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函数中的内容
- /Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates/Project Templates/Mac/Application/Command Line\ Tool.xctemplate/
修改OC文件头部的描述信息
- /Applications/Xcode.app/Contents/Developer/Library/Xcode/Templates/File Templates/Source/Cocoa Class.xctemplate
-------------------------------------------------------------------
八.Xcode文档安装
- Xcode文档安装的位置1:
- /Applications/Xcode.app/Contents/Developer/Documentation/DocSets
- 注意:拷贝之前最好将默认的文档删除, 因为如果同时存在高版本和低版本的文档, 那么低版本的不会显示
- Xcode文档安装的位置2:
- /Users/你的用户名/Library/Developer/Shared/Documentation/DocSets
- 如果没有该文件夹可以自己创建一个
- /Users/你的用户名/Library/Developer/Shared/Documentation/DocSets
1.Xcode文档在线安装
- 打开Xcode,首选项
- 点击DownLoads下载文档
2.Xcode文档离线安装
- 找到备份的文档
- com.apple.adc.documentation.AppleiOS8.0.iOSLibrary.docset
找到DocSets目录
- /Applications/Xcode.app/Contents/Developer/Documentation/DocSets
拷贝文件到该目录
退出重新打开Xcode
- 如果还不行,/Users/你的用户名/Library/Developer/Shared/Documentation/DocSets,看是否存在同名的或版本更新的,把它删掉
注意: 如果文件夹中有版本更高的文档不会显示低版本文档
3.Xcode文档基本使用
- 关键字说明
- Getting Started —— 新手入门,一般来说,是给完全的新手看的。建议初学者看看,这里面有一些建立观念的东西,有了这些建立观念的东西,后面的学习就比较容易了。
- Guides —— 指南,指南是Xcode里面最酷最好的部分,学会看指南则大多数情况完全不用买书。Xcode文档里面的指南,就是一个一个问题的,从一个问题,或者系统的一个方面出发,一步一步详细介绍怎么使用Cocoa库的文档。一般程序员比较熟悉的是Reference,就是你查某个类、方法、函数的文档时候,冒出来的东西。那些其实是一点一点的细碎知识,光看那些东西就完全没有脉络。而Guides就是帮你整理好的学习的脉络。
- Reference —— 参考资料。一个一个框架一个一个类组织起来的文档,包含了每个方法的使用方法。
- Release Notes —— 发布说明。一个iOS新版本带来了哪些新特性,这样的信息,熟悉新iOS,比较不同iOS版本API不同,都需要参考这些文档。
- Sample Code —— 示例代码。苹果官方提供的一些示例代码,帮助你学习某些技术某些API。非常强烈建议学习的时候参考,一方面光看文档有时候还是很难弄明白具体实现是怎么回事儿。另外一方面这些示例代码都是苹果的工程师写的,你从示例代码的变迁可以看到苹果官方推荐的代码风格流变。
- Technical Notes —— 技术说明。一些技术主题文章,有空的时候可以浏览一下。往往会有一些收获。
- Technical Q&A —— 常见技术问答。这是技术社区里面一些常见问题以及回答的整理。
- Video —— 视频。目前主要是WWDC的视频,实际上是登录到开发者网站上去浏览的,这里就是快捷方式。想深入学习的话,一定不能错过,大量的看,不仅可以学好技术,还可以练好英文。
- 这里面的Reference、Release Notes、Sample Code、Technical Notes、Technical Q&A,一般来说只是备查的。主要要看的是Getting Started和Guides。
4.如何阅读文档?
- 快速查询文档
- 按住Option键查询
- 通过Quick Help查询
- 搜索帮助
- 阅读文档
OC中的结构体的更多相关文章
- 关于OC中直接打印结构体,点(CGRect,CGSize,CGPoint,UIOffset)等数据类型
关于OC直接打印结构体,点(CGRect,CGSize,CGPoint,UIOffset)等数据类型,我们完全可以把其转换为OC对象来进项打印调试,而不必对结构体中的成员变量进行打印.就好比我们可以使 ...
- 关于OC中直接打印结构体(CGRectCGSize、CGPoint、UIOffset)等数据类型
关于OC直接打印结构体,点(CGRect,CGSize,CGPoint,UIOffset)等数据类型,我们完全可以把其转换为OC对象来进项打印调试,而不必对结构体中的成员变量进行打印.就好比我们可以使 ...
- C++中的结构体
http://zhidao.baidu.com/link?url=8OYQSKV9mvSBc6Hkf9NsLQmipSge9VCZDJQGAZZs5PCBQ54UTmK98VRmAklEEAFYu7d ...
- C/C++中的结构体
结构体定义 结构体(struct)是由一系列具有相同类型或不同类型的数据构成的数据集合,也叫结构. 结构体作用 结构体和其他类型基础数据类型一样,例如int类型,char类型 只不过结构体可以做成 ...
- C语言中的结构体,结构体数组
C语言中的结构体是一个小难点,下面我们详细来讲一下:至于什么是结构体,结构体为什么会产生,我就不说了,原因很简单,但是要注意到是结构体也是连续存储的,但要注意的是结构体里面类型各异,所以必然会产生内存 ...
- 再识C中的结构体
在前面认识C中的结构体中我介绍了结构体的基础知识,下面通过这段代码来回顾一下: #include<stdio.h> #define LEN 20 struct Student{ //定义结 ...
- C语言中的结构体和C++中的结构体以及C++中类的区别
c++中结构体可以定义一个函数 C中的结构体和C++中结构体的不同之处:在C中的结构体只能自定义数据类型,结构体中不允许有函数,而C++中的结构体可以加入成员函数. C++中的结构体和类的异同: 一. ...
- 关于C语言中结构体中的结构体成员导致的字节对齐问题
关于结构体的字节对齐是什么,就不赘述,再此附上一篇文章,介绍字节对齐:http://www.linuxsong.org/2010/09/c-byte-alignment/ 这里的结构体字节对齐的数据类 ...
- C语言中处理结构体的原理
汇编中有几种寻址方式,分别是直接寻址:(ds:[idata]).寄存器间接寻址(ds:[bx]).寄存器相对寻址(ds:[bx + idata].ds:[bx + si])基址变址寻址(ds:[bx ...
随机推荐
- UVA1104 Chips Challenge
一.题目 有一个 \(n\times n\) 的矩阵,每个元素可能是 ..C./ 的其中一种,分别表示可以放置芯片.已经放置了芯片.不能放置芯片,你可以分别决定是否可以放置芯片的位置放置芯片. 最后需 ...
- 分布式事务(四)之TCC
在电商领域等互联网场景下,传统的事务在数据库性能和处理能力上都暴露出了瓶颈.在分布式领域基于CAP理论以及BASE理论,有人就提出了柔性事务的概念.在业内,关于柔性事务,最主要的有以下四种类型:两阶段 ...
- 从0到1使用Kubernetes系列(六):数据持久化实战
本文是从 0 到 1 使用 Kubernetes 系列第六篇,上一篇<从 0 到 1 使用 Kubernetes 系列(五):Kubernetes Scheduling>介绍了 Kuber ...
- uni-app map组件关于marker标记点动态设置的问题
marker是Array类型,赋值的时候只能对整个数组进行更改赋值,不能只改变内部的对象,亲测Vue.$set()也不行 this.marker = [ { latitude: 39.90, long ...
- PTA 7-1 公路村村通 (30分)
PTA 7-1 公路村村通 (30分) 现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本. 输入格式: 输入数据包括城镇数目正整数N ...
- 学习JS的第二天
一.数据类型间的转换 主要:数字与字符串之间的转换 1.隐式转换 // console.log(1==true);[] 字符串与数字相加,其结果就是字符串 类似于字符串拼接 concole.log( ...
- install virtualenv without sudo
用普通用户安装virtualenv Perhaps this was valid for older versions of virtualenv. For now, if you want to r ...
- 第四周PTA笔记 好吃的巧克力+特殊的翻译+下次一定(续)+走迷宫
好吃的巧克力 超市正在特价售卖巧克力,正好被贪吃的Lucky_dog看见了. 巧克力从左到右排成一排,一共有N个,M种. 超市有一个很奇怪的规定,就是你在购买巧克力时必须提供两个数字a和b,代表你要购 ...
- string类运用:特殊的翻译
特殊的翻译 小明的工作是对一串英语字符进行特殊的翻译:当出现连续且相同的小写字母时,须替换成该字母的大写形式,在大写字母的后面紧跟该小写字母此次连续出现的个数:与此同时,把连续的小写字母串的左侧和右侧 ...
- Django笔记&教程 4-3 模型(models)主键外键
Django 自学笔记兼学习教程第4章第3节--模型(models)主键外键 点击查看教程总目录 参考:https://docs.djangoproject.com/en/2.2/ref/models ...