我一直是搞Android开发的,期间也做过一段时间cocos游戏开发和微信小程序,不过主要还是做Android开发的。今年由于项目需要,需要做mac开发,那就学习一下object c呗。我感觉编程思想是一样的,只不过是语法不一样而已,学了两天,感觉还是java语法简单和纯粹。
做ios开发的同事,总结了一些需要学习了解的概念和语法:
类方法,实例方法,属性(难点和重点)
字符串 NSString,数组 NSArray,字典 NSDictionary,集合 NSSet 以及相应的可变类型
OC 类别的使用,Block的定义使用(难点和重点)
宏定义
内存管理、stong与weak(难点和重点)
Objective C语言中nil、Nil、NULL、NSNull的区别
object-c 基础十六 【NSDictionary】字典类型
Objective-C学习笔记-NSSet与NSDictionary
Object-C中的内存管理 MRC、ARC以及Autoreleasepool的区别
下面这篇文章说的是MRC模式下的内存管理,讲的很好,可以参考学习
下面这篇文章里面有对各种概念的英文原文解释,比各种程序员按照自己的理解写的表述要准确的多
下面文章中,举了一个strong和weak使用的例子,例子本身不错。但是,没有讲明白原理,很遗憾。结合上面文章中的英文解释就能明白,我在这里解释一下。
__weak,specifies a reference that does not keep the referenced object alive. A weakreference is set to nil when there are no strong references to the object.
当一个object没有一个strong reference指向它的时候,指向这个object的weak reference就会被设置成nil。strong和retain可以理解成是一样的,如果testView是Strong的,那么,self.testView = view,这样的使用就会使对象的计数加+,后续[self.testView removeFromSuperview],我理解和调用release差不多,让计数减1,这样计数最终的值还是大于0的,所以对象不会被回收。但如果testView是weak的话,那么,self.testView = view,这样的使用并不会使对象计数加1,后续[self.testViewremoveFromSuperview]会让计数减1,这样计数就成0了,对象被回收了,testView被自动设置成了nil。
下面的文章也是好文章,里面的例子,帮我们理解清楚了strong、weak和unsafe_unretained
在OC中使用block的时候,总会遇到循环引用(retain cycle)的问题。
再次吐槽,虽然object c 引入了ARC机制,好像是程序员不用管理内存了,其实,实际情况不是这样,ARC是编译期行为,内部还是引用计数的机制,只是稍微简化了一些而已,只能说是半自动化,因为程序员还是得操心循环引用的问题。在java里面基本不用,因为垃圾回收机制是运行期行为,循环引用也不会有问题,垃圾回收不是采用简单的引用计数实现的。
iOS开发系列--Block中的weakSelf/strongSelf使用
block里的self、weakSelf、strongSelf