当前位置:  编程技术>移动开发
本页文章导读:
    ▪开始小弟我的 JNI 入门吧        开始我的 JNI 入门吧JNI (java native interface)   java本地开发接口(一句话 : 就是1个 adapter)。 JNI  是一个协议  -   是用来让   java代码和C,C++ 代码可以沟通(相互调用) 的一种协议 ,JNI 扩.........
    ▪ 关于TableView中出现deallocated有关问题        关于TableView中出现deallocated问题Message sent to deallocated instance 关于的ios 开发中 deallocated问题,相信大家遇到了不少了; 关于怎么查找解决这个问题,特别是当问题在tableView出现的时候,我今天.........
    ▪ objective-C 自定义对象存档的实现       objective-C 自定义对象归档的实现自定义对象要实现归档必须实现NSCoding协议 NSCoding协议有两个方法,encodeWithCoder方法对对象的属性数据做编码处理,initWithCoder解码归档数据来初始化对象。 #im.........

[1]开始小弟我的 JNI 入门吧
    来源: 互联网  发布时间: 2014-02-18
开始我的 JNI 入门吧

JNI (java native interface)   java本地开发接口(一句话 : 就是1个 adapter)。

JNI  是一个协议  -   是用来让   java代码和C,C++ 代码可以沟通(相互调用) 的一种协议 ,JNI 扩展了java虚拟机的能力 。

Java语言提供的类库无法满足要求,且在数学运算,实时渲染的游戏上,音视频处理等方面上与C/C++相比效率稍低。

Java语言无法直接操作硬件,C/C++代码不仅能操作硬件而且还能发挥硬件最佳性能。


首先 要从最基本的开始 androd 调用 C,C++代码 肯定最起码代码不说会写,最起码是要能看懂和修改的,我把大1学的C语言也早早就忘光了哈哈。所以跟着复习点基础吧。

更深入的学习就有待以后吧 - -

C语言的基本数据类型:

         char(C语言中 byte类型也是用 char),  1
         int,     4
         float,    4
         double,     8
         signed,      4   有符号的 
         unsigned,    4   无符号的 
         long,       4- 8根据编译器的不同 
         short,      2   
        
C语言的输入和 输出:

           %d  -  int
           %ld – long int
           %c  - char
           %f -  float
           %lf – double 
           %x – 十六进制输出 int 或者long int 或者short int
           %o -  八进制输出
           %s – 字符串
   
           int a;                 //定义变量a 
           scanf("%d",&a);        //从键盘上获取数据 放入a所在的 地址  &a           
           printf("a=%d\n",a);    // 输出a的值 
C语言的指针 - 这个是核心啦

       int p =11;        //32位操作系统 指针占 4个字节    64位占8个字
       int* pp = &p;
       
       printf("P的中存放的值: %d\n",p);
       printf("P的地址是: %X\n",&p);
       
       printf("PP指针变量存放的地址是: %X\n",pp);
       printf("PP指针变量的大小: %d\n",sizeof(pp));
       printf("PP指针变量存放的地址 - 对应的值: %d\n", *pp);
       
       
       int* p; //定义一个指针变量   垃圾值
       指针变量如果没有赋值就不能使用  
         
        int dd;  
        char* c; ;  // 编译错误  不符合的指针类型  
         c = ⅆ
       //printf("*p=%d\n",*p); 
      

指针输出图:


C语言的多级指针:

     int   bb = 10;
     int*   m = &bb;       //m存的是 (bb的内存地址 )
     int**  mm  = &m;      //mm 存的是  m指针变量的 -地址 
     printf("mm的值(m的内存地址) : %X\n", *mm);
     printf("(m的内存地址) 所对应的值  = bb : %d\n", **mm);
     printf("bb : %d\n", bb);


数组

        int a[5] = {1,2,3,4,5}; 
        printf("a0= %X\n", &a[0] );   // a表示的直接就是 数组a 的第一个元素所对应的内存区域
        printf("a0= %X\n", &a );   
       
        printf("a0= %d\n", *(a+0));  
        printf("a1= %d\n", *(a+1));  
        printf("a2= %d\n", *(a+2));  
        printf("a3= %d\n", *(a+3));

   
       //利用char类型指针 方便的表示一个字符串  
      
       char* arr1= "hello androd ndk";   
       printf("%s",arr1); 
      


动态数组

 // 6.动态的创建1个数组

      int* aa = malloc(sizeof(int) * 6);    //先申请1个能够存 6个 int的空间
      aa = realloc(aa , sizeof(int)* 8);      //变成 能放8个的 空间大小
      *aa =0;
      *(aa+ 1) =1; 
      *(aa+ 2) =2; 
        
       printf("aa1= %d\n", *(aa+1));
       printf("aa2= %d", *(aa+2));
        
       //free(aa);                               //用过后 不用了要自己手动释放 
    


C语言的结构体

    //结构体 - 这个就有点类似 java中的class了
       struct ll{
           int    age;
           char*  name;
           char*  sex;
           };
    
       struct ll   s={11, "lilei","boy"};
       struct ll*  lss;

       printf("age  = %d\n", s.age);
       printf("name = %s\n", s.name);
       printf("sex  = %s\n", s.sex);
                                              //2种方式
       lss = &s;
       printf("age  = %d\n", lss->age);
       printf("name = %s\n", lss->name);
       printf("sex  = %s\n", lss->sex);     



联合体

  
    union { long i; char ii; int iii; }    pp ; 
   
    // 联合体的作用就是用来表示一组数据类型 数据的数据类型为这一组中的某一种数据类型 
    //注意 : 联合体里面的数据内容会相互覆盖 
    
    printf("pp:%d\n",sizeof(pp));  
    pp.ii = 'A';
    printf("long=%ld\n",pp.i);
    printf("char=%c\n",pp.ii);
    printf("int=%d\n",pp.iii);



枚举

     enum WeekDay
     {
         Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday
     };
     
     //其实就是一连串的数字而已 
     enum WeekDayNum
     {
         Monday1=50,Tuesday1,Wednesday1,Thursday1,Friday1,Saturday1,Sunday1
     };
     
     
     enum WeekDay day = Sunday;
     enum WeekDayNum dayNum = Sunday1;
     
     printf("day : %d\n",day);
     printf("dayNum : %d\n",dayNum);
     
     system("pause");
    



typedef

     typedef int  myInt;
     myInt a = 10;
     printf("myInt -  a: %d\n",a);



宏定义

     #define STE_LEN 80          

还有很多要复习的东西,先看这么多。





    
[2] 关于TableView中出现deallocated有关问题
    来源: 互联网  发布时间: 2014-02-18
关于TableView中出现deallocated问题

Message sent to deallocated instance

关于的ios 开发中 deallocated问题,相信大家遇到了不少了;

关于怎么查找解决这个问题,特别是当问题在tableView出现的时候,我今天又有一点的新的看法.

        单方面去查找中这个问题问题不大,但是当整个程序耦合性很高的时候,稍微不注意就会造成数据的过度释放。

如果追踪deallocate问题技巧


当你在tableVIew中出现这样的对象的错误,一定是你对象过度的释放了,因为tableView 中的Cell是重用的,如果你在Cell中把对象释放了,会导致其他cell条目访问访问的时候找不到相应的资源了;这是调试了一个下午发现的问题,原有的思想是:面向对象,cell是自己自定义的一个对象,觉得自己的对象其中的对象应该是自己去创建和释放;但是往往你操作的对象的原有的数据源的数据; 解决办法: 对新新对象进行的copy操作,或是delloc中的不要进行的release操作;




    
[3] objective-C 自定义对象存档的实现
    来源: 互联网  发布时间: 2014-02-18
objective-C 自定义对象归档的实现

自定义对象要实现归档必须实现NSCoding协议

NSCoding协议有两个方法,encodeWithCoder方法对对象的属性数据做编码处理,initWithCoder解码归档数据来初始化对象。

#import <Foundation/Foundation.h>


@interface user : NSObject <NSCoding>

@property(nonatomic,retain)NSString *name;

@property(nonatomic,retain)NSString *email;

@property(nonatomic,retain)NSString *pwd;

@property(nonatomic,assign)int age;

@end

#import "user.h"

#define AGE @"age"

#define NAME @"name"

#define EMAIL @"email"

#define PASSWORD @"password"


@implementation user


//对属性编码

- (void)encodeWithCoder:(NSCoder *)aCoder

{

    [aCoder encodeInt:_ageforKey:@"age"];

    [aCoder encodeObject:_nameforKey:AGE];

    [aCoder encodeObject:_emailforKey:EMAIL];

    [aCoder encodeObject:_pwdforKey:PASSWORD];

}


//对属性解码

- (id)initWithCoder:(NSCoder *)aDecoder

{

    self=[super init];

    if(self)

    {

        self.age=[aDecoderdecodeIntForKey:AGE];

        self.name=[aDecoderdecodeObjectForKey:NAME];

        self.email=[aDecoderdecodeObjectForKey:EMAIL];

        self.pwd=[aDecoderdecodeObjectForKey:PASSWORD];

    }

    return self;

}


-(void)dealloc

{

    [_name release];

    [_email release];

    [_pwd release];

    [super dealloc];

}

@end


main函数的调用

    user *userObj=[[user alloc] init];
        userObj.age=33;
        userObj.email=@"adfdadf@qq.com";
        userObj.pwd=@"212212";
        userObj.name=@"ricard";
        
        NSString *path=[NSHomeDirectory() stringByAppendingPathComponent:@"Desktop/custom.text"];
        BOOL succ=[NSKeyedArchiver archiveRootObject:userObj toFile:path];
        if (succ) {
                    NSLog(@"Hello, World!");
            user *usertemp=[NSKeyedUnarchiver unarchiveObjectWithFile:path];
            
        }




    
最新技术文章:
▪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