黑马程序员-iOS基础-Objective-C基础(三)

来源:互联网 发布:御马脚垫 知乎 编辑:程序博客网 时间:2024/05/22 00:19

-----------android培训java培训、java学习型技术博客、期待与您交流!------------

在Objective-C 2.0里面,新增加了一个"."操作的语法。在Mac OS X 10.5里面就使用了Objective-C 2.0语法:

  1. photo.caption = @"Day at the Beach";  
  2. output = photo.caption;  
  3.  

我们两种方式都可以使用。但是在一个工程里面最好保持风格一致,只使用某一种。"."操作只能够被使用在setters和getters里面,而不能用在一般意思的方法上。

创建对象

主要有两种方式来创建一个对象。第一种办法像这面这样:

  1. NSString* myString = [NSString string];  
  2.  

这是一种非常习惯性的风格。在这种方式情况下,我们创建的是系统自动释放(autoreleased)类型的对象。关于自动释放类型autoreleased,我们以后会深入讨论一下。然而在许多情况下,我们需要手动的去创建对象:

  1. NSString* myString = [[NSString alloc] init];  
  2.  

这是一个嵌套的方法调用。第一个调用的NSString自己的alloc方法。这是一个相对比较底层的调用,因为他创建了内容,以及实例化了一个对象。

第二块代码调用了新创建对象的init方法。这个init方法实现了比较常用的基本设置,比如创建实例对象的参数。对于一般开发人员而言,实现这个客户的类的具体的细节并不清楚。

在一些情况下,我们可以用不通的初始化方式去赋初值:

  1. NSNumber* value = [[NSNumber alloc] initWithFloat:1.0];  
  2.  

基本的内存管理

假如我们正在为Mac OS X开发一个应用程序,我们可以选择是否启用垃圾回收机制。这就意味着我们不需要去考虑内存管理,除了一个特别复杂的情形我们需要处理一下。

然而,我们有的时候我们的开发环境没有垃圾回收机制,比如iPhone开发的时候就没有垃圾回收机制。在这种情况下,我们就需要了解一些基本的内存管理方面的概念。

假如我们手动的通过alloc创建了一个对象,我们需要用完这个对象后release它。我们不需要手动的去release一个autoreleased类型的对象,假如真的这样去做的话,我们的应用程序将会crash。

这里有两个例子:

  1. // string1 will be released automatically  
  2.  
  3. NSString* string1 = [NSString string];  
  4.  
  5. // must release this when done  
  6.  
  7. NSString* string2 = [[NSString alloc] init];  
  8.  
  9. [string2 release];  
  10.  

就这个教程而言,我们可以人为autoreleased对象会在当前函数方法调用完成后被释放。

当然了,还有很多关于内存管理的只是我们需要学习,但是这需要我们了解更多的基本概念以后才能去涉及。

 

0 0