一、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篇】的更多相关文章

  1. iOS开发——实战OC篇&环境搭建之纯代码(玩转UINavigationController与UITabBarController)

    iOS开发——实战OC篇&环境搭建之纯代码(玩转UINavigationController与UITabBarController)   这里我们就直接上实例: 一:新建一个项目singleV ...

  2. iOS开发——实战OC篇&环境搭建之Xib(玩转UINavigationController与UITabBarController)

    iOS开发——实战OC篇&环境搭建之Xib(玩转UINavigationController与UITabBarController)   前面我们介绍了StoryBoard这个新技术,和纯技术 ...

  3. iOS开发——实用技术OC篇&单例模式的实实现(ACR&MRC)

    单例模式的实实现(ACR&MRC) 在iOS开发中单例模式是一种非常常见的模式,虽然我们自己实现的比较少,但是,系统却提供了不少的到来模式给我们用,比如最常见的UIApplication,No ...

  4. iOS开发——实战OC篇&环境搭建之StoryBoard(玩转UINavigationController与UITabBarController)

      环境搭建之StoryBoard(玩转UINavigationController与UITabBarController)   研究了这么就IOS开发,都没有所处一个像样或者自己忙一点的项目.最近自 ...

  5. iOS开发——控制器OC篇&UINavigationController&UITabBarController详解

    UINavigationController&UITabBarController详解 一:UINavigationController 控制器的属性: UINavigationControl ...

  6. iOS开发——图层OC篇&UIColor深入研究(CGColor,CIColor)

    UIColor深入研究(CGColor,CIColor) 由于跟人比较喜欢研究关于图层与动画方面的技术,正打算看看别人写的好东西,就遇到了好几个问题, 第一:UIClor类方法的使用 就是关于UICo ...

  7. iOS开发——多线程OC篇&多线程详解

    多线程详解 前面介绍了多线程的各种方式及其使用,这里补一点关于多线程的概念及相关技巧与使用,相信前面不懂的地方看了这里之后你就对多线程基本上没有什么问题了! 1——首先ios开发多线程中必须了解的概念 ...

  8. iOS开发——多线程OC篇&多线程总结

    多线程总结 //1.NSThread /** 优点:NSThread 比其他两个轻量级. 缺点:需要自己管理线程的生命周期,线程同步,线程同步时对数据的加锁会有一定的系统开销. cocoa给我提供了两 ...

  9. iOS开发——图层OC篇&Quartz 2D各种绘制实例

    Quartz 2D各种绘制实例 首先说一下,本篇文章只是介绍怎么使用Quartz 2D绘制一些常用的图像效果,关于Quartz和其他相关技术请查看笔者之前写的完整版(Quartz 2D详解) 一:画线 ...

随机推荐

  1. git分支概念与项目中的应用

    文档:https://git-scm.com/book/zh/v2/Git-%E5%88%86%E6%94%AF-%E5%88%86%E6%94%AF%E7%AE%80%E4%BB%8B 分支理解 m ...

  2. 【Java】 生成32位随机字符编号

    /** * 生成32位编码 * @return string */ public static String getUUID(){ String uuid = UUID.randomUUID().to ...

  3. 关于MySQL的经典例题50道

    --1.学生表Student(S,Sname,Sage,Ssex) --S 学生编号,Sname 学生姓名,Sage 出生年月,Ssex 学生性别--2.课程表 Course(C,Cname,T) - ...

  4. oracle表空间不足:ORA-01653: unable to extend table

    问题背景: oracle表空间不足报错是比较常见的故障,尤其是没有对剩余表空间做定期巡检的系统: 报错代码如下: oracle表空间不足错误代码:ORA-01653: unable to extend ...

  5. web前端开发自学路线是怎样的?html+css+JavaScript的学习方法?

    不废话,直接干货 学习前端的几个个阶段: 一阶段:html标签.html5新增标签.css样式.css3样式.媒体查询等 二阶段:JavaScript.jQuery.ajax.面向对象.http传输协 ...

  6. 洛谷P3258 [JLOI2014]松鼠的新家【LCA+树上差分】

    简要题意 树上n个节点,给定路径,求每个点经过次数 题意分析 对于每两个点,有两种情况,第一种,他们的lca为本身,第二种,他们有公共祖先,又要求他们的点经过次数,暴力是不可能的,复杂度不对,所以可以 ...

  7. 无 PowerShell.exe 执行 Empire 的几种姿势

    在实战中,Empire成为域渗透.后渗透阶段一大利器,而Empire是一个Powershell RAT,所以PowerShell必须要能运行Empire中几乎所有的启动方法都依赖于使用PowerShe ...

  8. window下 phpstorm 打不开

    如果 window 上不能执行 strace 命令, 安装 Git Bash 工具. 切换到 phpstorm 安装的 bin 目录: D 盘的相关文件昨天被我删了!奇怪这文件怎么放到那里了? 换个路 ...

  9. jar包的多层级maven依赖的坑与正确传递方法

    这个问题简述起来就是项目加载jar包但是无法加载jar包的依赖 这是一个maven的特性吗? 问题发生前 程序猿经常自己写一些库实现或收集常用的逻辑方法(算法和设计模式等等),以方便多个项目使用,避免 ...

  10. 线性回归 python 代码实现

    本代码参考自:https://github.com/lawlite19/MachineLearning_Python#%E4%B8%80%E7%BA%BF%E6%80%A7%E5%9B%9E%E5%B ...