【IOS开发学习—OC篇】
一、instancetype和id关键字的区别
1)instancetype表示方法的返回类型和调用方法的对象类型相同。
2)在Object-C引入instancetype之前,初始化方法的返回类型都是id,id的定义是【指向任意对象的指针(相当于C语言中的void*)】
它们的区别是:instancetype只能用来表示方法返回类型,但是id还可以用来表示变量和方法参数的类型。
二、在头文件中的方法声明顺序
1)这算是一个约定,按照先后顺序是:实例变量、类方法(静态方法)、初始化方法、其他方法。
三、生成随机数的方法—arc4random()
1)使用方法
通过arc4random() 获取0到x-1之间的整数: int value = arc4random() % x;
获取1到x之间的整数的代码如下:int value = (arc4random() % x) + 1;
四、[NBRItem count]: unrecognized selector sent to instance 0x100309120'下
这个是常见的错误,碰到这种错误,从字面意思上看是向对象发送了一个不能识别的selector,因此要检查NBRItem对象是否有count这个方法。
五、弱引用和强引用
1)指针变量指向了某个对象,那么相应的对象就会多一个拥有者,并且不会被程序释放,这种指针特性被成为强引用。
2)程序也可以选择让指针变量不影响其指向的对象的拥有者个数,这种不会改变对象拥有者个数的指针特性被成为弱引用。常用来解决强引用循环的问题,可以先分析出父子关系,然后将父对象保留强引用的特性,然后子对象搞成弱引用特性(__weak),具有弱引用特性的指针指向的对象被释放后,指针会自动设置为nil。
六、属性的特性
任何属性都可以有一组特性,用于描述相应存取方法的行为,比如:
@property(nonatomic, readwrite, strong) NSString *itemName
任何属性都有三个特性
1)多线程特性
nonautomic 和 atomic ,大多数情况下,我们都设置属性为nonautomar,因为默认是atomic,所以我们要指定为nonautomar。
2)读写特性
readwrite和readonly,从字面意思就可以知道,编译器会为readwrite的属性生成set和get方法,但是readonly的属性只有get方法。
3)内存管理特性
strong、weak、copy、unsafe_unretained。这些类型决定相应的实例变量将如何引用对象。
- 对于不知向任何对象的属性(int等)不需要内存管理,定义为unsafe_unretained,它使非对象属性的默认值,所以可以不用写,在引入ARC之前曾经使用assign表示。
- 对于指向OC对象的属性,四中类型都有可能。默认是strong类型。
- 对于某个属性指向其他对象的指针,而且该对象的类有可修改的子类(比如:NString/NSMutableString、NsArray/NSMutableArray),应该将属性设置为copy。对于mutableCopy和copy的区别,见文章【浅copy和深copy】
未完待续。。。
【IOS开发学习—OC篇】的更多相关文章
- iOS开发——实战OC篇&环境搭建之纯代码(玩转UINavigationController与UITabBarController)
iOS开发——实战OC篇&环境搭建之纯代码(玩转UINavigationController与UITabBarController) 这里我们就直接上实例: 一:新建一个项目singleV ...
- iOS开发——实战OC篇&环境搭建之Xib(玩转UINavigationController与UITabBarController)
iOS开发——实战OC篇&环境搭建之Xib(玩转UINavigationController与UITabBarController) 前面我们介绍了StoryBoard这个新技术,和纯技术 ...
- iOS开发——实用技术OC篇&单例模式的实实现(ACR&MRC)
单例模式的实实现(ACR&MRC) 在iOS开发中单例模式是一种非常常见的模式,虽然我们自己实现的比较少,但是,系统却提供了不少的到来模式给我们用,比如最常见的UIApplication,No ...
- iOS开发——实战OC篇&环境搭建之StoryBoard(玩转UINavigationController与UITabBarController)
环境搭建之StoryBoard(玩转UINavigationController与UITabBarController) 研究了这么就IOS开发,都没有所处一个像样或者自己忙一点的项目.最近自 ...
- iOS开发——控制器OC篇&UINavigationController&UITabBarController详解
UINavigationController&UITabBarController详解 一:UINavigationController 控制器的属性: UINavigationControl ...
- iOS开发——图层OC篇&UIColor深入研究(CGColor,CIColor)
UIColor深入研究(CGColor,CIColor) 由于跟人比较喜欢研究关于图层与动画方面的技术,正打算看看别人写的好东西,就遇到了好几个问题, 第一:UIClor类方法的使用 就是关于UICo ...
- iOS开发——多线程OC篇&多线程详解
多线程详解 前面介绍了多线程的各种方式及其使用,这里补一点关于多线程的概念及相关技巧与使用,相信前面不懂的地方看了这里之后你就对多线程基本上没有什么问题了! 1——首先ios开发多线程中必须了解的概念 ...
- iOS开发——多线程OC篇&多线程总结
多线程总结 //1.NSThread /** 优点:NSThread 比其他两个轻量级. 缺点:需要自己管理线程的生命周期,线程同步,线程同步时对数据的加锁会有一定的系统开销. cocoa给我提供了两 ...
- iOS开发——图层OC篇&Quartz 2D各种绘制实例
Quartz 2D各种绘制实例 首先说一下,本篇文章只是介绍怎么使用Quartz 2D绘制一些常用的图像效果,关于Quartz和其他相关技术请查看笔者之前写的完整版(Quartz 2D详解) 一:画线 ...
随机推荐
- 基于Docker和Golang搭建Web服务器
1 场景描述 基于centos7的docker镜像搭建golang开发环境 在docker容器内,使用golang实现一个Web服务器 启动docker容器,并在容器内启动Web服务器 我购买了一个最 ...
- 即学即用的 30 段 Python 实用代码
[☞ 分享:最全最新的Python学习大礼包 ☜ 点击查看](https://mp.weixin.qq.com/s?__biz=MzU2MzgyODA4OA==&mid=100000592&a ...
- .netCore+Vue 搭建的简捷开发框架 (4)--NetCore 基础 -2
上节中,我们初步的介绍了一下NetCore的一些基础知识,为了控制篇幅(其实也是因为偷懒),我将NetCore 基础分为两部分来写. 0.WebAPI 项目的建立 1..NetCore 项目执行(加载 ...
- 利用golang优雅的实现单实例
平时编写代码过程中,经常会遇到对于全局角度只需运行一次的代码,比如全局初始化操作,设计模式中的单例模式.针对单例模式,java中又出现了饿汉模式.懒汉模式,再配合synchronized同步关键字来实 ...
- MySQL视图的优缺点以及如何创建视图
视图,虚拟表,从一个表或多个表中导出来的表,作用和真实表一样,包含一系列带有行和列的数据 视图中,用户可以使用SELECT语句查询数据,也可以使用INSERT,UPDATE,DELETE修改记录,视图 ...
- vc++木马源码免杀一些常用方法
1.字符串连接 ////////////////////////////////////////////////////////////把字符串"canxin"连接起来(字符串连接 ...
- Tomcat源码分析三:Tomcat启动加载过程(一)的源码解析
Tomcat启动加载过程(一)的源码解析 今天,我将分享用源码的方式讲解Tomcat启动的加载过程,关于Tomcat的架构请参阅<Tomcat源码分析二:先看看Tomcat的整体架构>一文 ...
- ESP8266开发之旅 进阶篇⑥ ESP-specific APIs说明
1.前言 在介绍Arduino Core For ESP8266的时候,博主着重讲解了WIFI库的使用,但是并没有涉及到ESP8266硬件本身的一些特有API.所以,这一章我们将讲解ESP82 ...
- electron打包分发
原始的方式打包 下载对应的版本号的Release Electron 然后把对应的项目方便整理成这样的目录结构(Windows下) node_modules重新安装,不然可能启动失败 把整文件夹给别人就 ...
- 基于STM32F103和Cube的输入捕获例程
1.开发环境 (1)Cube5.24 (2)Keil5 (3)STM32F103 2.Cube配置 Cube配置很简单,只要打开TIM4通道1的引脚,设置为输入捕获模式,在配置是高或低电平沿触发 TI ...