黑马程序员技术交流社区

标题: 【最强直播贴】十五天拿下OC,靠谱?!(笔记+原码) [打印本页]

作者: FengLinHuoShan    时间: 2015-11-17 22:20
标题: 【最强直播贴】十五天拿下OC,靠谱?!(笔记+原码)
本帖最后由 FengLinHuoShan 于 2015-11-17 23:09 编辑

有人问了,撸主,你丫在吹B吧!当时我就不乐意了,劳资20多年的清白不能说玷污就玷污!
你们见过这么委婉含蓄一本正经的吹B吗?
说有的站出来,保证不打死你!
有人问了,撸主,我还是不敢相信,你是零基础吗?
呵呵,撸主冷笑!可能吗?撸主是负基础,打死你信吗?
有人问了,撸主,可以和你生猴子吗?
撸主送你一句话:不是不可能,看脸!
废话不多说了,哥们要开撸了!!
等等。。。
又有人问了了了,撸主,你哪个班的?
这个问题有点严重!!说出来怕你们来打我,我才不会告诉你们是最近开的iOS双元班,哈哈哈~~~
一会上笔记!!


作者: FengLinHuoShan    时间: 2015-11-17 22:57
新鲜出炉热乎乎的笔记来了!!!
OC加强-1
内存分为哪几个区域?(注意:面试题)
BSS段:用来存放程序中未初始化的全局变量的一块内存区域。BSS是英文Block Started by Symbol的简称
数据段:用来存放程序中已初始化的全局变量的一块内存区域
代码段:用来存放程序执行代码的一块内存区域
以上三个区域是程序启动的时候加载的。
堆(heap):存放进程运行中被动态分配的内存段——>OC内存管理的范围:任何继承自NSObject的对象
栈(stack):存放程序临时创建的局部变量,也就是说我们函数括弧“{}”中定义的变量(但不包括static声明的变量,static意味着在数据段中存放变量)
tips:栈区的地址从高到低分配、堆区的地址从低到高分配。
作者: 超人不会飞啊    时间: 2015-11-17 23:28
你起码说说是哪个地区的双元班吧
作者: 约吗^_^    时间: 2015-11-18 00:01
5分钟教你搞定OC
作者: MrK    时间: 2015-11-18 00:04
l撸主 你是没基础就入学了?。
是不是要学5个月?。。。。。。。。。
作者: yufang1993    时间: 2015-11-18 00:11
默默点赞!!!!!!!!!!!!!!!!!!!
作者: 姚春林    时间: 2015-11-18 09:33
。。。。。。
作者: Marlong    时间: 2015-11-18 10:56
先Mark一下,晚上再看,话说楼主快更
作者: 韦德460    时间: 2015-11-18 13:25
某楼5分钟搞定oc!!!
作者: 453702877    时间: 2015-11-18 21:42
都是这么猛的人吗???
作者: cbl16888    时间: 2015-11-19 19:18
支持一个,赞
作者: FengLinHuoShan    时间: 2015-11-20 22:24
狗把宿舍网咬断了,才接上!!!停更了两天撸主表示很抱歉!!(玩炉石的应该很讨厌这句话!!!)
这是这两天的笔记加原码!!
内存管理分类:
MRC、ARC、garbage collection

手动内存管理的原理:
1、对象的引用计数器:每个OC对象都有自己的引用计数器,是一个整数。表示对象被引用的次数,对象被创建时,默认计数器值为1,当计数器的值为0的时候,该对象销毁。
2、判断对象要不要回收的唯一依据计数器是否为0,不为0则存在。
3、对引用计数器的操作:
retain:使计数器+1,该方法返回对象本身
release:使计数器-1,并不代表释放对象
retainCount:获得对象当前的引用计数器值
作者: FengLinHuoShan    时间: 2015-11-20 22:27
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        //用Person 类实例化一个实例对象
        Person *p = [Person new];  // 对象有没有所有者?  有
        //        [p dealloc];
        //证明有一个所有者
        NSUInteger count = [p retainCount];
        
        NSLog(@"count = %lu",count);  // 1
        
        //使用引用计数器+1
        //        Person *p2 = p;            //
        //Person *p2 = [p retain];
        [p retain];
        NSLog(@"p.retainCount = %lu",[p retainCount]);   //2
        
        //如果要回收对象?  应该想办法 retatinCount = 0
        [p release];
        NSLog(@"p.retainCount = %lu",[p retainCount]);   //1
        
        [p release];  //此处执行后,p的空间被回收             //0
        
        //证明p的空间被释放了,可以在在Person类中,重写dealloc方法
    }
    return 0;
}

重写dealloc方法如下:
- (void)dealloc
{
    //1 先释放子类自己的对象的空间
    NSLog(@"Person已经挂了");
    //2 父类dealloc一定要加上啊啊
    [super dealloc];
}
作者: FengLinHuoShan    时间: 2015-11-20 22:28
看明白了上面这些手动内存管理算入门了,就是这么简单,学会了吗??
作者: FengLinHuoShan    时间: 2015-11-20 22:30
超人不会飞啊 发表于 2015-11-17 23:28
你起码说说是哪个地区的双元班吧

哥们我在帝都,你在哪啊兄弟?
作者: FengLinHuoShan    时间: 2015-11-20 22:31
约吗^_^ 发表于 2015-11-18 00:01
5分钟教你搞定OC

卧槽,教教我呗
作者: FengLinHuoShan    时间: 2015-11-20 22:42
MrK 发表于 2015-11-18 00:04
l撸主 你是没基础就入学了?。
是不是要学5个月?。。。。。。。。。

我自己撸视频赶进度,一切为了工作准备
作者: FengLinHuoShan    时间: 2015-11-20 22:43
手动内存管理的原则:
1、如果对象有人使用,就不应该回收 如果你想使用这个对象,应该让这个对象 retain一次 如果你不想使用这个对象了,应该让这个对象 relase一次
2、谁创建 谁release
3、 谁 retain 谁 release

内存管理研究的内容:
野指针:  1)定义的指针变量没有初始化     2)指向的空间已经被释放了
内存泄露:  { Person *p  = [Person new];  }   p 栈区 [Person new];  堆区  如果栈区的p已经释放了,而堆区的空间还没有释放,堆区的空间就被泄露了
作者: FengLinHuoShan    时间: 2015-11-20 22:47
野指针再现,僵尸对象应用!!!这尼玛感觉生化危机啊 操操操
#import <Foundation/Foundation.h>
#import "Dog.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        //创建一个对象
        //对象创建完成以后,默认的所有者有一个,是自己,所以引用计数为1
        Dog *byd = [Dog new];  //1
        [byd eat];  //
        NSLog(@"byd.retainCount = %lu",byd.retainCount);
        //如果一个对象已经被释放了,这个对象就称之为僵尸对象
        //
        [byd release];         //0
        //        NSLog(@"byd.retainCount = %lu",byd.retainCount);  //值已经没有意义了
        //这句话默认情况下不报错,
        //如果要让他报错,要开启僵尸对象检测
        //byd指针也就是野指针
        //        [byd eat];   //野指针访问
        
        //        [byd retain];  //byd 已经是僵尸对象了,不能复生
        
    }
    return 0;
}

作者: FengLinHuoShan    时间: 2015-11-20 22:52
Marlong 发表于 2015-11-18 10:56
先Mark一下,晚上再看,话说楼主快更

兄弟,有你这句话,哥们很是欣慰啊
作者: FengLinHuoShan    时间: 2015-11-20 22:53
MrK 发表于 2015-11-18 00:04
l撸主 你是没基础就入学了?。
是不是要学5个月?。。。。。。。。。

应该是!!
作者: 超人不会飞啊    时间: 2015-11-21 18:52
FengLinHuoShan 发表于 2015-11-20 22:30
哥们我在帝都,你在哪啊兄弟?

我在深圳...
作者: MrK    时间: 2015-11-21 20:53
FengLinHuoShan 发表于 2015-11-20 22:30
哥们我在帝都,你在哪啊兄弟?

我也在 求指教 撸主。。

作者: 453702877    时间: 2015-11-21 21:05
66666666666666666
作者: lixiang73033    时间: 2015-11-21 21:15
学习学习,多谢楼主
作者: cbl16888    时间: 2015-11-21 21:21
我也准备拿下OC
作者: 于鸿鹏    时间: 2015-11-21 21:33
FengLinHuoShan 发表于 2015-11-20 22:30
哥们我在帝都,你在哪啊兄弟?

哥们我也在帝都  可否留个联系方式  联系一下 480814177
作者: 一枚小刁民    时间: 2015-11-21 21:36
这个可以看看   
作者: FengLinHuoShan    时间: 2015-11-21 21:50
8点半下课,到家就9点20了!!!
据说我们班下个月的就业班赶不上了,在我们面前有三个选择:
1、参加5天后的就业班考试,然而OC还有一大半还没看
2、参加下个月的考试选择双元班
3、选择1月份开班的就业班
我觉得选哪个不重要,重要的是毕业的时候能不能赶上三四月的跳槽高峰期!是有点轻微的操蛋!!!
但是,今天还是要更,为了看我直播的朋友。
作者: FengLinHuoShan    时间: 2015-11-21 21:53
于鸿鹏 发表于 2015-11-21 21:33
哥们我也在帝都  可否留个联系方式  联系一下 480814177

我加你了 兄弟
作者: 夜神月No1    时间: 2015-11-21 22:09
要看你愿意花多少功夫了,其实oc的底层也是用c写的,只是面向对象了
作者: 罗文强    时间: 2015-11-26 00:55
向楼主致敬!
作者: lujia1010    时间: 2015-11-26 11:36
给楼主点个赞
作者: 唐阿丽    时间: 2015-11-26 13:09
支持一个,赞
作者: cherrycool    时间: 2015-11-26 13:17
不靠谱,只是可以了解,熟练运用的话,还是需要时间敲代码,思考的




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2