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. bzoj 2510: 弱题 循环矩阵

    2510: 弱题 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 124  Solved: 61[Submit][Status][Discuss] De ...

  2. Android判断界面

         仿造微信,第一次进入去引导界面,否则进启动界面. package edu.hpu.init; import edu.hpu.logic.R; import android.app.Activ ...

  3. IOS在后台每隔一段时间执行一下

    步骤: 1.在info.plist里加入UIBackgroundModes键,其值为数组,数组之一为voip字符串: <key>UIBackgroundModes</key>& ...

  4. [ecmall]Ecmall 后台添加模板编辑区

    例如,想把品牌/index.php?app=brand页面做成可编辑的. 首先,找到后台admin\includes\menu.inc.php第61行 'template' => array( ...

  5. 【HDU 3435】 A new Graph Game (KM|费用流)

    A new Graph Game Problem Description An undirected graph is a graph in which the nodes are connected ...

  6. http://www.ibm.com/developerworks/cn/opensource/os-cn-cas/

    http://www.ibm.com/developerworks/cn/opensource/os-cn-cas/

  7. ANDROID_MARS学习笔记_S04_005_用sing-post向腾讯微博发一条信息

    一.代码流程 1.组织好sign-post需要的token,secrect 2.组织好发微博需要的信息 3.用sign-post进行签名 4.把签名结果从header中拿出来,转成entity,用ht ...

  8. jni.h头文件详解一

    1.jni.h头文件路径: /usr/lib/jvm/jdk_1.6.0_43/include/jni.h 2.jni.h头文件组成分析图: 3.下面通过上图进行分析讲解jni.h头文件. 一. jn ...

  9. SIFT算法:特征描述子

    SIFT算法:DoG尺度空间生产  SIFT算法:KeyPoint找寻.定位与优化 SIFT算法:确定特征点方向  SIFT算法:特征描述子 目录: 1.确定描述子采样区域 2.生成描述子 2.1 旋 ...

  10. DELL笔记本拆机添加内存条

    在笔记本后面拧开7个螺丝 然后打开后盖 掰开卡口,内存条会弹出,此时按住内存条两侧的缺口往外用力就可以拔出内存条. 装入内存条时,先插入内存条,按下即可.