当前位置:  编程技术>移动开发
本页文章导读:
    ▪更有效率的使用Bit地图        更有效率的使用Bitmap  视图的背景图像总是会填充整个视图区域,图像的尺寸不合适和导致自动缩放,为了不免实时缩放,最好事先缩放到视图大小   originalImage = Bitmap.createScaledBitmap( .........
    ▪ Objective-C语法之动态门类(isKindOfClass, isMemberOfClass,id)等        Objective-C语法之动态类型(isKindOfClass, isMemberOfClass,id)等 对象在运行时获取其类型的能力称为内省。内省可以有多种方法实现。 判断对象类型 -(BOOL) isKindOfClass: classObj判断是否是这个类或者这.........
    ▪ Objective-C语法之NSArray跟NSMutableArray       Objective-C语法之NSArray和NSMutableArray Objective-C的数组比C++,Java的数组强大在于,NSArray保存的对象可以是不同的对象。但只能保存对象,int ,char,double等基本数据类型不能直接保存,需要通过转.........

[1]更有效率的使用Bit地图
    来源: 互联网  发布时间: 2014-02-18
更有效率的使用Bitmap



 视图的背景图像总是会填充整个视图区域,图像的尺寸不合适和导致自动缩放,为了不免实时缩放,最好事先缩放到视图大小

 

originalImage = Bitmap.createScaledBitmap( 
        originalImage,    // 被缩放图像
        view.getWidth(),  // 视图宽度
        view.getHeight(), // 视图高度
        true);            // 双线性过滤器

 


    
[2] Objective-C语法之动态门类(isKindOfClass, isMemberOfClass,id)等
    来源: 互联网  发布时间: 2014-02-18
Objective-C语法之动态类型(isKindOfClass, isMemberOfClass,id)等

对象在运行时获取其类型的能力称为内省。内省可以有多种方法实现。

判断对象类型

-(BOOL) isKindOfClass: classObj判断是否是这个类或者这个类的子类的实例

-(BOOL) isMemberOfClass: classObj 判断是否是这个类的实例

ps:本篇新建的类主要用于熟悉本篇内容设计,未考虑内存管理因素。

我们试试这两个方法的使用。

1、新建Person类继承NSObject,新建Teacher类继承Person 1.1、新建Person类

 

[cpp] view plaincopy
  • #import <Foundation/Foundation.h>  
  •   
  • @interface Person : NSObject  
  • {  
  •     NSString *name;  
  • }  
  • -(void)setName:(NSString*)n;  
  •   
  • @end  
  •  

    [cpp] view plaincopy
  • #import "Person.h"  
  •   
  • @implementation Person  
  • -(void)setName:(NSString *)n  
  • {  
  •     name = n;  
  • }  
  •   
  • @end  
  •  

    1.2新建Teacher类

     

     

    [cpp] view plaincopy
  • #import "Person.h"  
  •   
  • @interface Teacher : Person  
  •   
  • -(void)teach;  
  •   
  • @end  
  • [cpp] view plaincopy
  • #import "Teacher.h"  
  •   
  • @implementation Teacher  
  • -(void)teach  
  • {  
  •     NSLog(@"我教数学");  
  • }  
  • @end  
  •  

    1.3 我们先实验下isMemberOfClass方法。

     

    [cpp] view plaincopy
  • NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];  
  •    Person *person = [[Person alloc] init];  
  •    Teacher *teacher = [[Teacher alloc] init];  
  •      
  •    //YES  
  •    if ([teacher isMemberOfClass:[Teacher class]]) {  
  •         NSLog(@"teacher Teacher类的成员");  
  •    }  
  •    //NO  
  •    if ([teacher isMemberOfClass:[Person class]]) {  
  •        NSLog(@"teacher Person类的成员");  
  •    }  
  •    //NO  
  •    if ([teacher isMemberOfClass:[NSObject class]]) {  
  •        NSLog(@"teacher NSObject类的成员");  
  •    }  
  •    [person release];  
  •    [teacher release];  
  •    [pool release];  
  •  

     

    打印结果:

    2012-07-04 14:23:07.965 ObjectiveCTest[2460:f803] teacher Teacher类的成员

    只有第一个判断打印出来,isMemberOfClass判断是否是属于这类的实例,是否跟父类有关系他不管。

    1.4 isKindOfClass方法

     

    [cpp] view plaincopy
  • NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];  
  • Person *person = [[Person alloc] init];  
  • Teacher *teacher = [[Teacher alloc] init];  
  •   
  • //YES  
  • if ([teacher isKindOfClass:[Teacher class]]) {  
  •     NSLog(@"teacher 是 Teacher类或Teacher的子类");  
  • }  
  • //YES  
  • if ([teacher isKindOfClass:[Person class]]) {  
  •     NSLog(@"teacher 是 Person类或Person的子类");  
  • }  
  • //YES  
  • if ([teacher isKindOfClass:[NSObject class]]) {  
  •     NSLog(@"teacher 是 NSObject类或NSObject的子类");  
  • }  
  • [person release];  
  • [teacher release];  
  • [pool release];  
  •  

    2012-07-04 14:34:17.315 ObjectiveCTest[2595:f803] teacher 是 Teacher类或Teacher的子类

    2012-07-04 14:34:17.316 ObjectiveCTest[2595:f803] teacher 是 Person类或Person的子类

    2012-07-04 14:34:17.316 ObjectiveCTest[2595:f803] teacher 是 NSObject类或NSObject的子类

    三个结果都打印出来了。

    2、

    -(BOOL) respondsToSelector: selector判读实例是否有这样方法

    +(BOOL) instancesRespondToSelector:  判断类是否有这个方法。此方法是类方法,不能用在类的对象

    2.1 respondsToSelector的使用

    这里不写对象的创建和释放了,参考上面的代码

     

    [cpp] view plaincopy
  • // YES  
  • if ( [teacher respondsToSelector: @selector( setName: )] == YES ) {  
  •     NSLog(@"teacher responds to setSize: method" );  
  • }  
  •   
  • // NO  
  • if ( [teacher respondsToSelector: @selector( abcde )] == YES ) {  
  •     NSLog(@"teacher responds to nonExistant method" );  
  • }  
  •   
  • // YES  
  • if ( [teacher respondsToSelector: @selector( alloc )] == YES ) {  
  •     NSLog(@"teacher class responds to alloc method\n" );  
  • }  
  • 打印结果:

     

     

    2012-07-04 14:39:49.853 ObjectiveCTest[2723:f803] teacher responds to setSize: method

    2012-07-04 14:39:49.854 ObjectiveCTest[2723:f803] teacher class responds to alloc method

    中间的那个判断我随便写了个selector,当然没有了。respondsToSelector 检查类方法 alloc返回YES

    2.2 instancesRespondToSelector

     

    [cpp] view plaincopy
  • // NO  
  •     if ( [Person instancesRespondToSelector: @selector(teach)] == YES ) {  
  •         NSLog(@"Person instance responds to teach method" );  
  •     }  
  •       
  •     // YES  
  •     if ( [Teacher instancesRespondToSelector: @selector(teach)] == YES ) {  
  •         NSLog(@"Teacher instance responds to teach method");  
  •     }  
  •     // YES  
  •     if ( [Teacher instancesRespondToSelector: @selector(setName:)] == YES ) {  
  •         NSLog(@"Teacher instance responds to setName: method" );  
  •     }  
  • 打印结果:

     

     

    [cpp] view plaincopy
  • 2012-07-04 14:52:29.378 ObjectiveCTest[2961:f803] Teacher instance responds to teach method  
  • 2012-07-04 14:52:29.379 ObjectiveCTest[2961:f803] Teacher instance responds to setName: method  
  •  

     

    3、Objective-C的id类型


    C++ 使用的是强类型:对象必须符合其类型,否则不能通过编译。在 Objective-C 中,id类型类似于(void*) ,可以指向任何类的实例。而不需要强制转换。

     

    下面看看使用,

    先把Teacher类中的 teach方法修改一下,改成

     

    -(void)teach

    {

        NSLog(@"%@ 教数学" ,name);

    }

    然后实现并调用

     

    [cpp] view plaincopy
  • NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];  
  • Person *person = [[Person alloc] init];  
  • Teacher *teacher = [[Teacher alloc] init];  
  •   
  • id p = person;  
  • id t = teacher;  
  • [t setName:@"张三老师"];  
  • [t teach];  
  •   
  • [person release];  
  • [teacher release];  
  • [pool release];  
  • 打印结果:

     

     

    [cpp] view plaincopy
  • 2012-07-04 14:57:55.905 ObjectiveCTest[3085:f803] 张三老师 教数学  
  •  

    著作权声明:本文由http://blog.csdn.net/totogo2010/原创


        
    [3] Objective-C语法之NSArray跟NSMutableArray
        来源: 互联网  发布时间: 2014-02-18
    Objective-C语法之NSArray和NSMutableArray

    Objective-C的数组比C++,Java的数组强大在于,NSArray保存的对象可以是不同的对象。但只能保存对象,int ,char,double等基本数据类型不能直接保存,需要通过转换成对象才能加入数组。

    1、NSArray 不可变数组

    [array count] : 数组的长度。
    [array objectAtIndex 0]: 传入数组脚标的id 得到数据对象。
    [arrayWithObjects; ...] :向数组对象初始化赋值。这里可以写任意对象的指针,结尾必须使用nil。

     

    [cpp] view plaincopy
  • #import <Foundation/Foundation.h>  
  • int main(int argc, const char * argv[])  
  • {  
  •     @autoreleasepool {  
  •         NSObject *obj = [[NSObject alloc]init];          
  •         NSArray *array = [NSArray arrayWithObjects:  
  •                                    @"a",  
  •                                     obj,  
  •                                    @"c",nil];  
  •         NSLog(@"array Count:%lu",[array count]);  
  •         //遍历数组  
  •         for (NSObject *object in array) {  
  •             NSLog(@"数组对象:%@", object);  
  •         }  
  •         [obj release];  
  •     }  
  •     return 0;  
  • }  
  • 打印结果:

    2012-07-09 10:52:17.050 objectiveC[944:403] array Count:3
    2012-07-09 10:52:17.052 objectiveC[944:403] 数组对象:a
    2012-07-09 10:52:17.052 objectiveC[944:403] 数组对象:<NSObject: 0x7fe479c14110>
    2012-07-09 10:52:17.053 objectiveC[944:403] 数组对象:c

    查找数组索引对应的对象

    NSLog(@"Index 2:%@", [array objectAtIndex:2]);

    打印结果:2012-07-09 10:55:16.382 objectiveC[993:403] Index 2:c

    2、NSMutableArray可变对象数组

    [NSMutableArray arrayWithCapacity:6] :初始化可变数组对象的长度,如果后面代码继续添加数组超过长度6以后NSMutableArray的长度会自动扩充,6是自己可以设置的颗粒度。
    [array addObject:...] : 向可变数组尾部添加数据对象。
    [array addObjectsFromArray:..] :向可变数组尾部添加一个数组对象。

    2.1普通使用:

     

    [cpp] view plaincopy
  • #import <Foundation/Foundation.h>  
  • int main(int argc, const char * argv[])  
  • {  
  •     @autoreleasepool {  
  •         NSObject *obj = [[NSObject alloc]init];     
  •         NSMutableArray *muArray = [NSMutableArray arrayWithCapacity:6];  
  •         [muArray addObject:@"对象1"];  
  •         [muArray addObject:@"对象2"];  
  •         [muArray addObject:@"对象3"];  
  •         [muArray addObject:@"对象4"];  
  •         [muArray insertObject:@"搅局的" atIndex:2];  
  •         [muArray addObject:obj];  
  •         for (NSObject * object in muArray) {  
  •             NSLog(@"数组对象:%@", object);  
  •         }      
  •         [obj release];  
  •     }  
  •     return 0;  
  • }  
  •  

    打印:

     

    2012-07-09 14:01:08.994 objectiveC[2090:403] 数组对象:对象1
    2012-07-09 14:01:08.996 objectiveC[2090:403] 数组对象:对象2
    2012-07-09 14:01:08.997 objectiveC[2090:403] 数组对象:搅局的
    2012-07-09 14:01:08.997 objectiveC[2090:403] 数组对象:对象3
    2012-07-09 14:01:08.998 objectiveC[2090:403] 数组对象:对象4
    2012-07-09 14:01:08.998 objectiveC[2090:403] 数组对象:<NSObject: 0x109714110> 

     

    NSRange range = NSMakeRange(0,3); 设置一个范围为 0 到 3 之间。
    [array removeObject:obj inRange:range] : 设置在一个范围内删除数据,如果这个范围内没有删除的这个对象则不会删除任何东西。例子中因为obj对象在 数组 0 到 3的范围内,所以obj就被删除掉了。

    2.2 removeObject和removeObjectIdenticalTo

    [array removeObject:(id)] :删除数组中指定元素,根据对象isEqual消息判断。

    [array removeObjectIdenticalTo:(id)] : 删除数组中指定元素,根据对象的地址判断

    [array removeObjectIdenticalTo:(id) inRange:(NSRange)] : 在指定范围内删除指定的元素。

    [array removeObjectAtIndex:(NSUInteger)]:删除数组中指定脚标索引的数据。

    [array removeObjectsInArray:(NSArray *)] :删除一个数组的元素。

    下面我们主要验证下removeObject  removeObjectIdenticalTo这两个方法的区别,

    先实验removeObject的使用

     

    [cpp] view plaincopy
  • int main(int argc, const char * argv[])  
  • {  
  •     @autoreleasepool {  
  •         NSString *str1 = [[NSString alloc] init];  
  •         NSString *str2 = [[NSString alloc] init];  
  •         NSString *str3 = [str1 stringByAppendingFormat:@"字符串"];  
  •         NSString *str4 = [str2 stringByAppendingFormat:@"字符串"];  
  •   
  •         NSMutableArray *muArray = [NSMutableArray arrayWithCapacity:6];  
  •         [muArray addObject:@"对象"];  
  •         [muArray addObject:str3];  
  •         [muArray addObject:str4];  
  •         for (NSObject * object in muArray) {  
  •             NSLog(@"数组对象:%@", object);  
  •         }  
  •   
  •         if ([str3 isEqual:str4]) {  
  •             NSLog(@"str1 isEqual str2");  
  •         }  
  •         if (str3  == str4) {  
  •             NSLog(@"str1 == str2");  
  •         }  
  •         [muArray removeObject:str3];  
  •         for (NSObject * object in muArray) {  
  •             NSLog(@"数组对象:%@", object);  
  •         }  
  •         [str1 release];  
  •         [str2 release];  
  •     }  
  •     return 0;  
  • }  
  •  

     

    运行打印:

    2012-07-09 14:57:52.059 objectiveC[2399:403] 数组对象:对象
    2012-07-09 14:57:52.061 objectiveC[2399:403] 数组对象:字符串
    2012-07-09 14:57:52.062 objectiveC[2399:403] 数组对象:字符串
    2012-07-09 14:57:52.062 objectiveC[2399:403] str1 isEqual str2
    2012-07-09 14:57:52.063 objectiveC[2399:403] 数组对象:对象

    这时,数组里的两个“字符串”对象都被去除了。

    现在试试 removeObjectIdenticalTo

    代码改成:  [muArray removeObjectIdenticalTo:str3];

    打印:

    2012-07-09 14:59:53.520 objectiveC[2432:403] 数组对象:对象
    2012-07-09 14:59:53.521 objectiveC[2432:403] 数组对象:字符串
    2012-07-09 14:59:53.522 objectiveC[2432:403] 数组对象:字符串
    2012-07-09 14:59:53.523 objectiveC[2432:403] str1 isEqual str2
    2012-07-09 14:59:53.523 objectiveC[2432:403] 数组对象:对象
    2012-07-09 14:59:53.524 objectiveC[2432:403] 数组对象:字符串

    数组中有个还有一个“字符串”留下来了。证明removeObjectIdenticalTo是通过对象的地址做判断的,

    我们用对比两个对象isEqual,用==对比对象的地址,打印出来了str1 isEqual str2

     

    inRange的使用

            NSRange rang = NSMakeRange(0, 3);
            [muArray removeObject:obj inRange:rang];

    指定范围删除对象,其他方法也可以指定范围删除,如果对象不在这个范围内,则不会被删除。

    2.3替换某索引值对应的对象

     

    [cpp] view plaincopy
  • int main(int argc, const char * argv[])  
  • {  
  •     @autoreleasepool {  
  •         NSObject *obj = [[NSObject alloc]init];   
  •   
  •         NSMutableArray *muArray = [NSMutableArray arrayWithCapacity:6];  
  •         [muArray addObject:@"对象1"];  
  •         [muArray addObject:@"对象2"];  
  •         [muArray addObject:@"对象3"];  
  •         [muArray addObject:@"对象4"];  
  •         [muArray addObject:obj];  
  •   
  •         for (NSObject * object in muArray) {  
  •             NSLog(@"数组对象:%@", object);  
  •         }  
  •         [muArray replaceObjectAtIndex:4 withObject:@"字符串替换回来"];  
  •         for (NSObject * object in muArray) {  
  •             NSLog(@"数组对象:%@", object);  
  •         }  
  •         [obj release];  
  •     }  
  •     return 0;  
  • }  
  • 替换后的打印结果:

    2012-07-09 15:06:01.919 objectiveC[2497:403] 数组对象:对象1
    2012-07-09 15:06:01.920 objectiveC[2497:403] 数组对象:对象2
    2012-07-09 15:06:01.920 objectiveC[2497:403] 数组对象:对象3
    2012-07-09 15:06:01.921 objectiveC[2497:403] 数组对象:对象4
    2012-07-09 15:06:01.921 objectiveC[2497:403] 数组对象:字符串替换回来
    3、数组迭代的遍历方法

     

     

    [cpp] view plaincopy
  • int main(int argc, const char * argv[])  
  • {  
  •     @autoreleasepool {  
  •         NSObject *obj = [[NSObject alloc]init];   
  •   
  •         NSMutableArray *muArray = [NSMutableArray arrayWithCapacity:6];  
  •         [muArray addObject:@"对象1"];  
  •         [muArray addObject:@"对象2"];  
  •         [muArray addObject:@"对象3"];  
  •         [muArray addObject:@"对象4"];  
  •         [muArray addObject:obj];  
  •   
  •         NSEnumerator *enmuerator = [muArray objectEnumerator];  
  •         id object;  
  •         while (object = [enmuerator nextObject]) {  
  •             NSLog(@"数组中的对象:%@", object);  
  •         }  
  •           
  •         [obj release];  
  •     }  
  •     return 0;  
  • }  
  • 打印结果:

     

     

    2012-07-09 16:00:26.153 objectiveC[2691:403] 数组中的对象:对象1
    2012-07-09 16:00:26.154 objectiveC[2691:403] 数组中的对象:对象2
    2012-07-09 16:00:26.155 objectiveC[2691:403] 数组中的对象:对象3
    2012-07-09 16:00:26.155 objectiveC[2691:403] 数组中的对象:对象4
    2012-07-09 16:00:26.156 objectiveC[2691:403] 数组中的对象:<NSObject: 0x7f91f8414110>

     

    著作权声明:本文由http://blog.csdn.net/totogo2010/原创


        
    最新技术文章:
    ▪Android开发之登录验证实例教程
    ▪Android开发之注册登录方法示例
    ▪Android获取手机SIM卡运营商信息的方法
    ▪Android实现将已发送的短信写入短信数据库的...
    ▪Android发送短信功能代码
    ▪Android根据电话号码获得联系人头像实例代码
    ▪Android中GPS定位的用法实例
    ▪Android实现退出时关闭所有Activity的方法
    ▪Android实现文件的分割和组装
    ▪Android录音应用实例教程
    ▪Android双击返回键退出程序的实现方法
    ▪Android实现侦听电池状态显示、电量及充电动...
    ▪Android获取当前已连接的wifi信号强度的方法
    ▪Android实现动态显示或隐藏密码输入框的内容
    ▪根据USER-AGENT判断手机类型并跳转到相应的app...
    ▪Android Touch事件分发过程详解
    ▪Android中实现为TextView添加多个可点击的文本
    ▪Android程序设计之AIDL实例详解
    ▪Android显式启动与隐式启动Activity的区别介绍
    ▪Android按钮单击事件的四种常用写法总结
    ▪Android消息处理机制Looper和Handler详解
    ▪Android实现Back功能代码片段总结
    ▪Android实用的代码片段 常用代码总结
    ▪Android实现弹出键盘的方法
    ▪Android中通过view方式获取当前Activity的屏幕截...
    ▪Android提高之自定义Menu(TabMenu)实现方法
    ▪Android提高之多方向抽屉实现方法
    ▪Android提高之MediaPlayer播放网络音频的实现方法...
    ▪Android提高之MediaPlayer播放网络视频的实现方法...
    ▪Android提高之手游转电视游戏的模拟操控
     


    站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3