alloc  new  retain之后都必须要调用release方法 计数器要变只有这几种方法 retain release alloc new copy方法才会使计数器改变,谁想用人家对象,就对他进行retain操作,但在dealloc释放本对象的时候也释放引用的对象,先释放引用的对象,然后释放自己,
内存管理做到”谁污染谁治理“,谁调用谁retain,是销毁 也要销毁retain的对象
当自己手动写get和set方法的时候,系统就不会帮我们生成synthesize,就不会自动产生下划线对象,所以在手动写get和set方法的时候如果用到下划线字段就会报错

excu_bad_access就是野指针错误,访问了一个不属于你的内存空间
assign:相当于str=str+1,是潜拷贝。对基础数据类型,(NSInteger,CGFloat)和C数据类型(int,float,  
       double,char,等等)
copy:对NSString
retain:对其他NSObject和其子类

assign:相当于str=str+1,是浅拷贝。对基础数据类型,(NSInteger,CGFloat)和C数据类型(int,float,

double,char,等等)

copy:对NSString

retain:对其他NSObject和其子类

NSMutableString *str1 = [NSMutableString stringWithString:@"mmmmmm"];

NSString *str2 = [str1 copy];  //拷贝一份出来,如果不用copy的话,后面对str1进行修改,那么也会影响str2的赋值

[str1 appendString:@"asdf"];

[str1 release];

NSLog(@"%@",str2);


用点语法,引用计数器就加1

-(id)initWithCoder:(NSCoder *)aDecoder{
if(self = [super init]){
self.name = [aDecoder decodeObjectForKey:@"name"];    //用了.语法,它的引用计数器就会+1
self.email = [aDecoder decodeObjectForKey:@"email"];
}
return self;
}

retain:
-(void)setName:(NSString *)name{
    if(_name != book){   //判断传进来的对象是否等于当前对象,如果不等,则释放之前的对象,再retain新对象
[_name release];  //会自动释放当前的对象,    防止原先stu.book = book0;接着stu.book = book1;那么book0就会有内存泄露,没有被释放,这个的话很好的防止了这一点,这也就是retain的作用
_name = [name retain];
    }
}


[stu release];
[stu release]; //野指针(会报错)  野指针指指向的内容不属于你的
stu = nil;//指将指针所指向的那条线给擦掉
[nil release]; //空指针(不报错)  空指针指指向的线断了,等于不指向什么内存空间

@class Student 在子类中申明Student是一个类,就不需要写@import "Student.h",因为那样会降低性能,import相当于把所有的头文件都拷贝过去了,在.m文件中写@import "Student.h",因为.m文件中真正要使用Student的那些方法。
@class有些功能 @import是做不到的  当两个类相互包含的时候,相互@import的时候就会出错,但@class相互包含就不会报错,只是什么这是一个类,如果有上百个类都要引用Student这个类,那么用@import的话,只要Student类中有一点点改变,这些都要重新
编译,所以还是用@class比较好


标准的set方法(也就是retain的内部实现机制)
-(void)setBook:(Book*)book{
if(_book != book){
[_book release];
_book = [book retain];
}

标准的dealloc方法
-(void)dealloc{
[_book release];
[super dealloc];
}

标准的初始化方法
- (void)initWithAge:(int)age {
     if ( self = [super init] ) {
         _age = age;
 }
 return self;
 }

然后创建对象:
Student *stu = [Student alloc] initWithAge:22];
stu.name = @"dingxiaowei";
NSLog(@"%@",stu);
[stu release];


@class Student 在子类中申明Student是一个类,就不需要写@import "Student.h",因为那样会降低性能,import相当于把所有的头文件都拷贝过去了,在.m文件中写@import "Student.h",因为.m文件中真正要使用Student的那些方法。

@class有些功能 @import是做不到的  当两个类相互包含的时候,相互@import的时候就会出错,但@class相互包含就不会报错,只是什么这是一个类,如果有上百个类都要引用Student这个类,那么用@import的话,只要Student类中有一点点改变,这些都要重新编译,所以还是用@class比较好

category能够动态给某个类动态的拓展方法,但不能添加属性
用category创建的分类,@interface Student(Test),类名后面如果有括号代表分类名称,如果后面有冒号,则代表继承,分类也要import导入要拓展的.h文件,但不能用@class,因为要对那个累拓展方法,所以要@import复制出有哪些方法,才能防止申明重复的同名方法

OC学习笔记[注意事项]的更多相关文章

  1. oc学习笔记2

    .oc中的BOOL类型 oc中的BOOL类型的值为YES和NO,有点小奇怪 在oc中YES不等于1,但是NO一定等于0,所以不要把1和YES来比较 .消息发送 在oc中,经常使用这样的术语:将allo ...

  2. OC学习笔记

    备注:这里只是个人的观点,有的地方也是copy,多多指教,个人笔记,有侵犯你们版权的地方还望海涵!!! ARC单例模式的实现 使用alloc方法初始化一个类的实例的时候,默认是调用了 allocWit ...

  3. OC学习笔记——类别(Category)

    类别,有些程序员又称之为分类. 类别是一种为现有的类添加新方法的方式,尤其是为系统的做扩展的时候,不用继承系统类,可以直接为类添加新的方法.也可以覆盖系统类的方法. 如: @interface NSO ...

  4. OC学习笔记之属性详解和易错点

    属性的概念在OC1.0中就存在,格式是定义实例变量,然后定义setter和getter方法,用点操作符操作属性 举例,类的接口部分 @interface Father : NSObject { NSI ...

  5. (转)OC学习笔记 @property的属性 strong 和 weak 理解

    在ObjectiveC里,用@property访问所有的实例变量.@property有一对属性:strong 和 weak.官方文档里的解释晦涩难懂:Stack Overflow里的用户RDC (ht ...

  6. Dynamic CRM 2013学习笔记(十五)报表设计:报表入门、开发工具及注意事项

    本文是关于CRM 2013报表开发入门介绍,包括开发工具的使用,以及不同于普通Reporting service的相关注意事项. 一.CRM报表简介 报表有两种,SQL-based报表和Fetch-b ...

  7. Swift 2.0 字符串学习笔记(建议掌握OC字符串知识的翻阅)

    自己公司开现在使用OC语言在写,但Swift似乎是苹果更推荐使用的开发语言,估计也是未来开发的趋势,自己以前有接触swift,但又由于公司的项目赶,也没有时间去好好地学习这款开发语言.现在年底了,项目 ...

  8. QML学习笔记(五)— 做一个简单的待做事项列表

    做一个简单的QML待做事项列表,能够动态添加和删除和编辑数据 GitHub:八至 作者:狐狸家的鱼 本文链接:QML学习笔记(五)— 做一个待做事项列表 主要用到QML:ListView 效果 全部代 ...

  9. 大一C语言学习笔记(5)---函数篇-定义函数需要了解注意的地方;定义函数的易错点;详细说明函数的每个组合部分的功能及注意事项

    博主学习C语言是通过B站上的<郝斌C语言自学教程>,对于C语言初学者来说,我认为郝斌真的是在全网C语言学习课程中讲的最全面,到位的一个,这个不是真不是博主我吹他哈,大家可以去B站去看看,C ...

随机推荐

  1. Maven安装与更新

    Maven是Apache组织中的一个颇为成功的开源项目,主要服务于基于Java平 台的项目构建.依赖管理和项目信息管理: 1) Maven是跨平台的,在Windows.Linux和Mac上都可以使用: ...

  2. 使用jdk生成证书以及把证书导入到jdk中

    证书对于实现此单点登录非常之重要,证书是服务器端和客户端安全通信的凭证,本教程只是演示,所有用了JDK自带的证书生成工具keytool.当然在实际项目中你可以到专门的证书认证中心购买证书. 中文官方网 ...

  3. 《attodiskbenchmarks-v2.47》说明文件

    对于用电脑方便且不喜欢在手机上乱装软件的我来说,很喜欢,特此整理,并在miui首发. 一.软件介绍 ATTO Disk Benchmark是一款电脑端使用的专业测速软件,该软件非常小巧,但却很专业,是 ...

  4. 【Xamarin开发 Android 系列 7】 Android 结构基础(下)

    原文:[Xamarin开发 Android 系列 7] Android 结构基础(下) *******前期我们不打算进行太深入的东西,省的吓跑刚进门的,感觉门槛高,so,我们一开始就是跑马灯一样,向前 ...

  5. MySQL查询原理及其慢查询优化案例分享(转)

    MySQL凭借着出色的性能.低廉的成本.丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库.虽然性能出色,但所谓“好马配好鞍”,如何能够更 好的使用它,已经成为开发工程师的必修课,我们经常会从职 ...

  6. Java NIO原理及实例

    Java NIO是在jdk1.4开始使用的,它既可以说成“新I/O”,也可以说成非阻塞式I/O.下面是java NIO的工作原理: 1. 由一个专门的线程来处理所有的 IO 事件,并负责分发. 2. ...

  7. Eclipse超级完美汉化教程

    转自:http://jingyan.baidu.com/article/e75057f28401a8ebc91a899e.html 是中国人都喜欢汉化的东西,除非你想挑战英文,抑或你就是英语高手.百度 ...

  8. C# WinForm窗体界面设置问题

    设置方法: 一:Form对象 属性: 设计中的Name:窗体类的类名AcceptButton:窗口的确定按钮CancelButton:窗口按ESC的取消按钮 1.外观 Backcolor:背景颜色Fo ...

  9. Unity给力插件之MeshBaker

    这是一个用来合并网格.材质.贴图的插件. 其实网上也有一些比较详细的使用说明,但是真实操作起来时,总是有一些搞不清bug.而且,作为功能比较全的插件,在Unity版本更新时,也难免会一些不兼容的地方. ...

  10. CUDA编程-(1)Tesla服务器Kepler架构和万年的HelloWorld

    结合CUDA范例精解以及CUDA并行编程.由于正在学习CUDA,CUDA用的比较多,因此翻译一些个人认为重点的章节和句子,作为学习,程序将通过NVIDIA K40服务器得出结果.如果想通过本书进行CU ...