Chinaunix首页 | 论坛 | 博客
  • 博客访问: 42754
  • 博文数量: 8
  • 博客积分: 430
  • 博客等级: 下士
  • 技术积分: 90
  • 用 户 组: 普通用户
  • 注册时间: 2010-10-31 12:33
文章分类
文章存档

2011年(2)

2010年(6)

我的朋友

分类: 嵌入式

2010-11-01 00:46:35

Objective-C基础学习( 二 )
 

一、分类和协议
 
1、分 类
 
    分类允许我们通过给一个类添加方法来扩展它,并且我们不需要访问基类的代码就可以做到。
 
例:头文件Header.h中:

@interface Class1: NSObject

-(return_type) method1;

@end
 
在头文件Header.m中:
 
@implemetation Class1

-(return_type) method1
{
   
}
@end
 
如果添加一个method2接口,则:新建一个名为Header+Test.h的文件,在类中添加method2方法。
 
 
2、协 议

   协议允许我们为可以在多个类中使用的一个或者多个方法制定一个接口。 
 
 
二、使用数组和字典
 
1、创建数组:

   例:NSArray *array = [[NSArray alloc] initWithObjects: @"red", @"white", @"blue", nil]

   用 Foundation类 NSArray来创建数组,这样的数组是静态变量。
   
   initWithObjects --------  初始化的一种方式:
   
2、访问数组中的单个元素:objectAtIndex
   
   例:[Array objectAtIndex: 0];

3、创建可变数组
   
   用 NSMutableArray 创建可变数组。

   NSMutableArray *array = [[NSMutableArray alloc] initWithObjects: @"red", @"white", @"blue", nil];

4、为可变数组添加元素
 
   发送addobject消息

   例:[array addobject: @"oranger"];

5、NSArray *aArray;         //我们的Array,假设他已经初始化有内容了
 
for ( id innerObj in aArray)     //id可以由其他对象类型替代
{
     //也就是说, 在循环中的参数innerObj就是aArray中的对象
     //由于NSArray中只能储存对象,所以我们使用id作为内涵对象的类型,其实就是个指针了
     //而且如果NSArray中的内容不一致,id更不会出现冲突
}

6、释放数组内存

       向数组发送一条release消息来释放数组所使用的内存,一条alloc 或者
 
retain消息对应一条release或者

autorelease消息。

7、创建字典

      使用单词或者其他的对象作为键,获取和存储通过键来访问的数据。

      使用NSDictionary 定义字典。

      例:NSDictionary *dictionary = [[NSDictionary alloc] 
 
initWithObjectiveAndKeys: @"banana", @"Fruit", ……,nil];

      initWithObjectiveAndKeys      初始化的一种方式

8、创建可变字典

       可以添加新项目拓展可变字典,也可以删除新项目来缩减可变字典。

  NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init];

  [dictionary release];     //程序结束时,回收这个可变字典的内存。

  [dictionary setObject: @"object1" forkey: @"key1"] ;  //通过对象的关键字

例:1

NSMutableDictionary *dic = [[NSMutableDictionary alloc] initWithObjects: @"object1" forkey: @"key1"];


NSMutableDictionary *dic = [[NSMutableDictionary alloc] initWithObjects: @"object2" forkey: @"key2"];


例:2


NSMutableDictionary *dic = [[NSMutableDictionary alloc] initWithObjectsAndKeys:


@"object1", @"key1", @"object2", @"key2", nil];


**成对出现的,中间均用“,”隔开,结尾要加nil***


// 例1 和 例2 是等价的,只不过两种初始化方式不同,所以结构上有差异。

                        
二、内存空间

1、内存管理
 
    Objective-C使用一个保留计数记录我们所创建的对象。当计数减少为 0 的时候自动收回分

配给对象的内存。
  
    创建两个类Class1和Class2:
    
    Class1 *class1 = [[Class1 alloc] init];

    Class1 *class2 = [[Class2 alloc] init];


访问每个对象其保留计数是多少,并打印结果;
    
    printf("object1 retainCount: %i\n",[object1 retainCount]);

    printf("object2 retainCount: %i\n",[object2 retainCount]);

    //要找到保留计数是多少,可以给对吸纳个发送一条retainCount消息。

自行增加保留计数:

    [object1 retain];
 
    [object1 retain];
 
    [object2 retain];

此时object1的保留计数从1-->2-->3

   object2的保留计数从从1-->2
 
要减少保留计数,可发送一条release消息:

    [object1 release];

    [object1 release];
 
此时object的计数减少到2,object2的计数减少到1。

// 一个alloc或者retain或者一个copy对应一个release或者autorelease


2、从内存中收回对象  
      
      用dealloc方法覆盖对象
 
      - (void)dealloc
      {
          [statusText release];
          [super dealloc];
       }

3、使用内存释放池

       如果使用alloc或者new来创建一个对象,我们将负责管理一个对象的内
 
存。但是对于不使用alloc或

者new创建的对象来说,我们可以用一个自动释放池来管理他们。

     NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

在程序的末尾

    [pool release];
    
 只需要释放池就可以释放所有对象。



      


 
 
 
 
 
 
 
 
 
 
阅读(505) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:iPhone学习1——第一个纯代码写的iPhone程序

给主人留下些什么吧!~~