[Stanford 2011] 知识点小结
1.获得帮助:option+click / option+double click
2.@property里的nonatomic,表示非原子性访问,atomic是obj-c里使用的一种线程保护技术,是防止在写未完成的时候被另一个线程读取,造成数据错误。而这种机制是耗费系统资源的。
3.使用@synthesize建立@property的setter和getter方法,以及backing instance variable(“_propertyname”),所以backing instance variable不会和property重名,重名会导致一些问题。
4.为什么要使用@property?
首要原因是为实体变量提供安全性和subclassability。如果我们允许被继承,子类要动用这些实体变量,我们需要能参与进来。如果子类设置了某个值,我们需要检查范围,保证不会破坏父类,所以这样就提供了安全性。
第二个原因是它提供了一个阀门给lazy instantiation、UI updating 和consistency checking。
综上,property有很多宝贵的作用,所以我们不要直接读取实体变量。
5.
1) @property必须要有实体变量(Instance Variables)吗?不需要。
2) 怎样才能让property没有实体变量呢?不要用@sythesize,自己创建setter和getter,这样就不会有辅助实体变量,你需要自己制造或计算property。some @property might be "calculated"(usually readonly) rather than stored.
3)可以有实体变量但没有@property吗?可以。
6. 为什么使用.号?
最重要的原因是看起来舒服,如self.display.text,如果不用.号,那就会有非常多的中括号,变得很难看懂。
同时也使得property的读取更明显一点,读代码的时候更容易发现这是在调用getter。
.号还能配合C里的结构体使用。
7.strong和weak
1)strong指针“keep this in the heap until I don‘t point to it anymore”(这仅针对对象而言,不包括其他类型,ios几乎只有对象指针)。也就是说,我强力的指向一个区域,我不再指向它的条件只有我指向nil或者我自己也不在内存上了,因为没有人strongly指向我了。
2)weak指针“keep this as long as someone else points to it strongly”,weak表示只要还有人strongly指向它那么就保留它,也就是说,我不再指向它了也没有关系。
3)weak还表示如果没有人指向它了,它就会被清除出heap,同时我就被指向nil,因为我不能读取不存在的东西。(If it gets thrown out of the heap,set my pointer to it to nil automatically(if user on ios5 only)).只有ios5支持weak,你设置了weak只有ios5能够在runtime时候自动设置nil,如果你在ios5下编程但编译为ios4,你不能使用weak的设空机制,你必须用strong,自己去设置为nil。
4)strong和weak是garbage collection吗?不是。It's reference counting done automatically for you.我们用reference count表示堆上还有多少strong指针,当它变为0就马上释放。这不像垃圾回收谁也不知道什么时候才被清除,垃圾回收是不可控的,这里完全是可控的,当失去最后一个strong指针,它马上就被释放了,没有延迟。
这里strong、weak都是针对property,本地变量都是strong的,当函数结束后,这个指针不再指向它了,那就马上被清理掉了。这是怎么实现的呢?是编译器在帮你计数,用reference count。
如果在ios5下开发但又要编译到ios4设备,需要手动去做reference counting吗?不是必须的,你没有了weak机制,但还有strong。
当我的对象要被清理出内存的时候会收到通知吗?yes,即用dealloc方法(release是ios4的东西,在ios5里不要用release、retain或者其他内存管理的东西,ios都已经做好了)
8. nil
1)The value of an object pointer that does not point to anything,指针nil就是不指向任何东西。
2)所有synthesize生成的实体变量的初始值都是0,pointer的初始值是nil。如果你希望你的指针指向什么东西,你可以调用setter或者getter里使用延迟初始化。
3)可以隐含的测试obj是否为nil。 if(obj){}
4)向nil发消息不会使程序崩溃,事实上什么也不会执行(No code gets executed):
If the method returns a value, it will return zero.
int i=[obj methodWhichReturnsAnInt]; // i will be zero if obj is nil.
Be careful if the method returns a C struct.Return value if undefind.
CGPoint p=[obj getLocation]; // p will have an undefined value if obj is nil,返回未定义的C结构体
所以如果你有个方法比如getLocation返回CGPoint,小心别让这里的obj为nil。
9. 实例方法 vs. 类方法
1)实例方法的对象是实例对象,类方法的对象是类。类方法通常用来创建对象或者工具方法。
2)self 和 super 在实例方法和类方法的实现里:
在实例方法里,根据继承原理发消息给self或者super其实都是发给self;
在类方法里,给self发消息只能发类方法,因为self不是实例,只是个类,super也一样。
3)什么时候用实例方法呢?几乎一直在用。
什么时候用类方法呢?当要创建一个实例时,或者获取一个共享的实例,或者获取关于类的一些公共信息。
4)类可以有property或者实例变量吗?不能,类不是实例,所以没办法保存任何东西。现在你明白你可以用C数据,但它会是全局的。
5)***类方法的作用就是提供一些信息,比如你会问ship类的某个类型的鱼类的携带量,这里不是去问某个实例而是问这个类。
(In Ship类) +(double)yieldForPhotonTorpedoOfType:(PhotonTorpedo)type;
***Using class method to create objects,获得对象的方法主要还是类方法。
(NSString's) +(id)stringWithFormat:(NSString *) format , ...
***Asking other objects to create objects for you.
-(NSString *) stringByAppendingString:(NSString *)otherString;
***Not all objects handed out by other objects are newly created.不是所有返回的对象都是新建的,如果对象已经存在就返回它的指针。
-(id)lastObject; ***从0开始新建对象 NSMutableArray *stack = [[NSMutableArray alloc] init]; //alloc表示在堆上分配足够大的空间,init表示分配的对象的初始值是0或者nil。 (不管对象是否需要初始化,永远100%要在alloc外加上init或者initWith,一定要直接加在后面,不能在下一行再init)[Stanford 2011] 知识点小结的更多相关文章
- C++重要知识点小结---3
C++重要知识点小结---1:http://www.cnblogs.com/heyonggang/p/3246631.html C++重要知识点小结---2:http://www.cnblogs.co ...
- C++重要知识点小结---2
C++重要知识点小结--1 :http://www.cnblogs.com/heyonggang/p/3246631.html 1.C++允许程序员声明一个不能有实例对象的类,这样的类惟一的用途是被继 ...
- React及Nextjs相关知识点小结
React及Nextjs知识点小结 函数式组件和类组件区别是什么 1.函数式组件是用于创建无状态的组件,组件不会被实例化,无法访问this中的对象,无法访问生命周期方法,是无副作用的,相比于类组件函数 ...
- 【SpringBoot MQ 系列】RabbitMq 核心知识点小结
[MQ 系列]RabbitMq 核心知识点小结 以下内容,部分取材于官方教程,部分来源网络博主的分享,如有兴趣了解更多详细的知识点,可以在本文最后的文章列表中获取原地址 RabbitMQ 是一个基于 ...
- SpringBoot 系列教程之事务隔离级别知识点小结
SpringBoot 系列教程之事务隔离级别知识点小结 上一篇博文介绍了声明式事务@Transactional的简单使用姿势,最文章的最后给出了这个注解的多个属性,本文将着重放在事务隔离级别的知识点上 ...
- disruptor笔记之四:事件消费知识点小结
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- [Stanford 2011] Views 知识点
一.view分层 (1)View的结构是分层的,一个view只能有一个父view,但可以有多个子view.子view的顺序是相关的,在数组中的位置越高或者说数字越大,就显示在后面,位置低的显示在前面. ...
- promise知识点小结
断断续续学习es6也有一段时间了,趁着开学空闲对知识点做一些小结. 为什么使用promise 谈到Promise,我们知道,这是社区较理想的异步编程解决方案.想要掌握promise,我们首先要知道其提 ...
- shell知识点小结
目录 引言 shell中的数组 数组的定义 数组的使用 实际的例子 shell中大小的比较 shell中的括号 shell中函数的定义 杂项知识点 字符串转数组 常用判断标志 linux后台运行相关 ...
随机推荐
- 提升 web 应用程序的性能(二)
最佳实践 本章将略述能帮助您提升 web 应用程序性能的最佳实践. 减少 HTTP 请求数 每个 HTTP 请求都有开销,包括查找 DNS.创建连接及等待响应,因此削减不必要的请求数可减少不必要的开销 ...
- [转帖] VS集成Qt环境搭建
http://blog.sina.com.cn/s/blog_a6fb6cc90101gynd.html 用了这么久的Qt,IDE一直都是VS与Creator并用(实际开发以VS为主),至于哪个更好这 ...
- Linux 高级网络编程
设置套接字函数: #include<sys/socket.h> int setsockopt(int sockfd, int level, int optname, const void* ...
- cmd下常用的一些命令
1.calc计算器 2.Mspaint画图 3.Netstat -anb查看端口 输入netstat -anb时可能会遇到下面问题 只要到搜索框输入cmd,然后到其快捷方式上右击以管理员身份运行即可 ...
- PHP wget 增强脱裤脚本(PDO MYSQL)
脚本参考了 LCX Gavin2位前辈的帖子.在此表示非常的感谢. https://www.t00ls.net/thread-26740-1-1.html https://www.t00ls.net/ ...
- MHA监控进程异常退出
这两天遇到一个非常诡异的问题,打算和大家分享一下.只所以诡异估计是自己知识面不够吧.线上的MHA一直没有开启自动切换,都是手动切换的,最近开启了自动切换以后,退出securecrt窗口以后发现监控进程 ...
- 5. Configure the Image Service
Controller Node: 1. sudo apt-get install glance python-glanceclient 2. sudo vi /etc/glance/glance- ...
- 持续集成篇_05_SonarQube代码质量管理平台的介绍与安装
1.SonarQube的介绍 SonarQube是一个管理代码质量的开放平台. 可以从七个维度检测代码质量(为什么要用SonarQube): (1)复杂度分布(complexity):代码复杂度过高将 ...
- java字符串抉择
下面我们就字符串连接方面分析. 1.String 打开String的源码,如图所示 会发现存储字符串的字符数值是final常量.再看String的构造方法,发现String的value值在构造方法就确 ...
- [IT学习]PowerBi 入门
从哪里开始呢?注册一个账号,从PowerBi的help开始就行了.Get Started会带领你从get data讲起,建立dataset,建立report,一直到dashboard创建. 下面这个链 ...