`
supermind
  • 浏览: 13758 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
最近访客 更多访客>>
社区版块
存档分类
最新评论

Object-C学习(五)

阅读更多
引用: http://blog.csdn.net/huanglx1984/article/details/4303041



iPhone 程序开发时内存的管理



在开发iPhone 程序时,一定要特别小心内存的管理。其实基本的道理很简单,就像我们以前写C++ 程序一样,new 和delete 要成对出现。问题是在某些时候,我们没有意识到自己使用了new 。



Objective-C 中对内存的管理采用引用计数的技术。简单说就是,当我们拥有一个变量的时候,这个变量的计数就加1,当我们释放这个变量的时候,这个变量的计数就减1。当计数为0时,这个变量就可以合法的被删除了。



1)alloc 很明显,这个函数调用之后,变量的计数加1。所以在调用alloc 之后,一定要调用对应的release

2)retain 保留一个对象。调用之后,变量的计数加1。或许不是很明显,我们举个例子

- (void) setName : (NSString*) name {

     [name retain];

     [myname release];

     myname = name;


}



我们来解释一下:设想,用户在调用这个函数的时候,他注意了内存的管理,所以他小心的写了如下代码:

NSString * newname = [[NSString alloc] initWithString: @"John"];

[aClass setName: newname];

[newname release];



我们来看一看newname的计数是怎么变化的。首先,它被alloc,count = 1; 然后,在setName中,它被retain, count = 2; 最后,用户自己释放newname,count = 1,myname指向了newname。这也解释了为什么需要调用[myname release]。我们需要在给myname赋新值的时候,释放掉以前老的变量。

3)copy 返回某个对象的一个拷贝。这个拷贝是一个新的对象,它的计数为1,需要在将来被release。



基本上,所有带有alloc, retain, copy的函数,都会使得变量的计数加1。因此在调用完这些方法之后,要小心release。另外还有一些初始化函数,它们没有带有alloc , retain 或者copy 的字样,比如stringWithFormat ,它们并不会使变量计数加1。





Autorelease

在Objective-C中,这个概念很象Java中的Garbage Collection 。它会把内存的管理交给另一个系统(autorelease pool)。在某些时候,我们在一个函数内部创建(alloc )了一个变量,但是我们无法在函数内部将这个变量释放(确实会有这种情况出现。。。),而显然,我们不可能在函数外部释放这个变量,这时候就可以借助Autorelease来帮忙了。据说,我们应该尽量自己管理内存,不要随便交给Autorelease。天下没有免费的午餐啊,呵呵。自己省了事,但是也失去了对内存的控制。。。天知道autorelease pool啥时候才会给你release啊。。。








Objective-C 提供了一些容器,如NSArray , NSDictionary , NSSet 等等,加入容器的对象都会使计数加1。这和C++ 中的容器类很相似。我们在C++ 中,常常看到:

void addElement( vector<ClassA>& my_list; )


{


    ClassA object1;

    my_list.push_back(object1);


}

虽然object1 是一个临时变量,在函数调用结束后会自动销毁,我们仍然可以安全的添加元素。

所以在Objective-C 中,我们也能看到如下代码:

NSMutableArray * array = [[NSMutableArray alloc] init];


NSNumber *num = [[NSNumber alloc] initWithInt: 1];

[array addObject: num ];

[num release];

... ...




再看两个编码上可以考量的地方:

1)为什么我们很少看见有人这样写代码:

AClass * class = [AClass alloc];

[class init];

而基本上都是 AClass * class = [[AClass alloc] init];

原因很简单,因为我们需要确保当init 调用失败的时候,class是一个无效的值(nil)。如果使用第一种方式,我们无法通过class的值知道init是否调用成功。这也告诉我们,在实现自己的init 方法时,需要在失败的时候返回nil 。

2)一般在dealloc方法中,我们都会释放一些变量,所以我们经常看到

- (void) dealloc {

    [ var release];

    [ super dealloc];


}

这样写当然没有错,但是我看见过某些“geek ”分析到:

在调用release 之后,虽然变量被释放了,可是它的值仍然是有效的。就好像我们在C++ 里面,delete 一个变量之后,一个好的习惯是,接着将这个变量赋值为0。所以,最优的方法是加上var = nil;



以上就是一些使用Objective-C 需要注意的地方。



到这里,我基本上说完了关于Objective-C 的基础内容,当然,它本身还有很多东西,不可能通过短短几篇博客就说完。而且我使用Objective-C 的时间也不长,无法做到面面俱到。但是,个人认为掌握这些基本概念之后,我们就可以开始iPhone 程序的开发了,在开发的过程中继续加深对Objective-C 的理解
分享到:
评论

相关推荐

    基于Object-C语言实现列表选择(项目源码).rar

    Object-C语言基础: 学习Object-C语言的基本语法和特性,了解Objective-C编程范式和iOS开发规范。 列表选择功能实现: 掌握实现iOS应用中列表选择功能的方法和技巧,包括列表的展示、数据的加载和选择状态的管理等...

    Object-C语言教程&案例&相关项目资源

    这篇文章为您呈现了一份详尽的Object-C语言学习资源概览,旨在帮助初学者和经验丰富的开发者系统地学习Object-C编程,并通过实践案例和项目资源提升实际编程能力。 文章首先聚焦于Object-C语言教程,这是学习Object...

    object-c学习路线

    学object-c的路线,可以借鉴一下,有个大体方向才是最好的学习方法

    Object-C 学习文档pdf

    该压缩文档包括了Object-C学习的两大经典书籍,《Object-C程序设计》、《Object-C基础教程》。建议先学习第一本书,然后学习第二本书。如果有c/c++的基础,学起来会非常快的。由于本人没什么下载积分,就厚着脸向...

    object-c学习

    对于初学者是一个好的文档,在你两个小时的时间里就可以对语法有个组基本的了解。

    Object-Cios苹果app开发入门object-c例子demo14个实例 一般编程问题

    ios苹果app开发入门,object-c,例子,demo,14个实例 初学者难得的学习实例 【实例截图】 【核心代码】 归档 ├── AirPrinter │ ├── AirPrinter │ │ ├── AirPrinter-Info.plist │ │ ├── AirPrinter...

    Object-c初学者文档

    Object-c初学者文档,学完就可以开发ios了!完全没压力

    object-c 解析显示 MS PPT

    object -c 解析 MS PPT 希望给大家一个学习思路。

    Object-C-关于Object-C的学习介绍了解

    Object-C

    Object-C的学习资料及14个Demo

    适用于Object-C初学者,里面有初学者相关的资料及相关的源码

    2024年Object-C快速入门.zip

    从Object-C的介绍和特点开始,逐步介绍了如何学习Object-C、Object-C的实际应用场景,以及Object-C的高级特性,如内存管理、多线程编程、设计模式和现代实践。此外,博客还提供了学习资源和进阶建议,并强调了加入...

    Object-C 学习笔记

    Object-C 学习笔记 自己整理的 适合初学者

    Object-C Programming

    Object-C Programming 前面7章的学习笔记,如果觉得好可以下载原本进行学习

    Learning iOS Programming 3rd Edition-- object-c 和 xcode4的学习文档

    学习iOS,最直接的方式就是买一台macBook pro,然后下载xcode,再挑选一本合适自己的ios入门书籍,object-c的学习过程中,第一要接触的ide还是xcode,或许网上有许多介绍xcode的资料,也有许多object-c学习的书籍,...

    object-c学习笔记

    本人是刚刚开始接触到OBJECT-C ,这是我在第一次学习object-C 是的学习笔记,请大家分享,赐教

    Object-C的教程.txt

    以下是一个简要的Object-C教程框架,帮助你了解学习Object-C所需的基本步骤和内容: 一、Object-C基础语法 变量与数据类型:了解Object-C中的变量声明和数据类型,包括基本数据类型(如int、float等)和对象类型...

    Object-C学习大纲.pdf

    Object-C学习大纲

    object-c学习教程PPT

    objectcC学习资料汇总,PPT素材,基础教程,Xcode学习

    TomCat By Object-C.zip

    如果您习惯了Object-C的语法,学习一个新的工程或者学习第三方的代码是很容易的。 如果您对这种方括号的语法规则还是不适应,不要担心。阅读完本教程您将会熟悉他们。 Frameworks 像其他的语言一样,Object-C语言...

    Mpush Client Object-C.zip

    如果您习惯了Object-C的语法,学习一个新的工程或者学习第三方的代码是很容易的。 如果您对这种方括号的语法规则还是不适应,不要担心。阅读完本教程您将会熟悉他们。 Frameworks 像其他的语言一样,Object-C语言...

Global site tag (gtag.js) - Google Analytics