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] 知识点小结的更多相关文章

  1. C++重要知识点小结---3

    C++重要知识点小结---1:http://www.cnblogs.com/heyonggang/p/3246631.html C++重要知识点小结---2:http://www.cnblogs.co ...

  2. C++重要知识点小结---2

    C++重要知识点小结--1 :http://www.cnblogs.com/heyonggang/p/3246631.html 1.C++允许程序员声明一个不能有实例对象的类,这样的类惟一的用途是被继 ...

  3. React及Nextjs相关知识点小结

    React及Nextjs知识点小结 函数式组件和类组件区别是什么 1.函数式组件是用于创建无状态的组件,组件不会被实例化,无法访问this中的对象,无法访问生命周期方法,是无副作用的,相比于类组件函数 ...

  4. 【SpringBoot MQ 系列】RabbitMq 核心知识点小结

    [MQ 系列]RabbitMq 核心知识点小结 以下内容,部分取材于官方教程,部分来源网络博主的分享,如有兴趣了解更多详细的知识点,可以在本文最后的文章列表中获取原地址 RabbitMQ 是一个基于 ...

  5. SpringBoot 系列教程之事务隔离级别知识点小结

    SpringBoot 系列教程之事务隔离级别知识点小结 上一篇博文介绍了声明式事务@Transactional的简单使用姿势,最文章的最后给出了这个注解的多个属性,本文将着重放在事务隔离级别的知识点上 ...

  6. disruptor笔记之四:事件消费知识点小结

    欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...

  7. [Stanford 2011] Views 知识点

    一.view分层 (1)View的结构是分层的,一个view只能有一个父view,但可以有多个子view.子view的顺序是相关的,在数组中的位置越高或者说数字越大,就显示在后面,位置低的显示在前面. ...

  8. promise知识点小结

    断断续续学习es6也有一段时间了,趁着开学空闲对知识点做一些小结. 为什么使用promise 谈到Promise,我们知道,这是社区较理想的异步编程解决方案.想要掌握promise,我们首先要知道其提 ...

  9. shell知识点小结

    目录 引言 shell中的数组 数组的定义 数组的使用 实际的例子 shell中大小的比较 shell中的括号 shell中函数的定义 杂项知识点 字符串转数组 常用判断标志 linux后台运行相关 ...

随机推荐

  1. 提升 web 应用程序的性能(二)

    最佳实践 本章将略述能帮助您提升 web 应用程序性能的最佳实践. 减少 HTTP 请求数 每个 HTTP 请求都有开销,包括查找 DNS.创建连接及等待响应,因此削减不必要的请求数可减少不必要的开销 ...

  2. [转帖] VS集成Qt环境搭建

    http://blog.sina.com.cn/s/blog_a6fb6cc90101gynd.html 用了这么久的Qt,IDE一直都是VS与Creator并用(实际开发以VS为主),至于哪个更好这 ...

  3. Linux 高级网络编程

    设置套接字函数: #include<sys/socket.h> int setsockopt(int sockfd, int level, int optname, const void* ...

  4. cmd下常用的一些命令

    1.calc计算器 2.Mspaint画图 3.Netstat -anb查看端口 输入netstat -anb时可能会遇到下面问题 只要到搜索框输入cmd,然后到其快捷方式上右击以管理员身份运行即可 ...

  5. PHP wget 增强脱裤脚本(PDO MYSQL)

    脚本参考了 LCX Gavin2位前辈的帖子.在此表示非常的感谢. https://www.t00ls.net/thread-26740-1-1.html https://www.t00ls.net/ ...

  6. MHA监控进程异常退出

    这两天遇到一个非常诡异的问题,打算和大家分享一下.只所以诡异估计是自己知识面不够吧.线上的MHA一直没有开启自动切换,都是手动切换的,最近开启了自动切换以后,退出securecrt窗口以后发现监控进程 ...

  7. 5. Configure the Image Service

    Controller Node: 1. sudo apt-get install glance python-glanceclient   2. sudo vi /etc/glance/glance- ...

  8. 持续集成篇_05_SonarQube代码质量管理平台的介绍与安装

    1.SonarQube的介绍 SonarQube是一个管理代码质量的开放平台. 可以从七个维度检测代码质量(为什么要用SonarQube): (1)复杂度分布(complexity):代码复杂度过高将 ...

  9. java字符串抉择

    下面我们就字符串连接方面分析. 1.String 打开String的源码,如图所示 会发现存储字符串的字符数值是final常量.再看String的构造方法,发现String的value值在构造方法就确 ...

  10. [IT学习]PowerBi 入门

    从哪里开始呢?注册一个账号,从PowerBi的help开始就行了.Get Started会带领你从get data讲起,建立dataset,建立report,一直到dashboard创建. 下面这个链 ...