zoukankan      html  css  js  c++  java
  • IOS开发

    2、其它类型:

    (一)id类型

    id类型是一个独特的数据类型,在概念上,类似java的Object类,可以转换为任何数据类型。换句话说,id类型变量可以存放任何数据类型的对象。在内部处理上,这种类型被定义为指向对象的指针,实际上是一个指向这种对象的实例变量的指针。需要注意的是id是一个指针,所以在使用id的时候不需要加星号;

    比如说:id foo=nil;

    该语句定义了一个nil指针,这个指针指向NSObject的任意一个子类。而“id *foo=nil"则定义了一个指针,这个指针指向另一个指针,被指向这个指针指向NSObject的一个子类;

    下面是一个示例:两个不同的类(一个是学生类Student,一个是会员类Member),这两个类拥有不同的成员变量和方法。

    Student.h

    [cpp] view plaincopy
     
    1. #import <Foundation/Foundation.h>  
    2.   
    3. @interface Student : NSObject{  
    4.     int sid;  
    5.     NSString *name;  
    6. }  
    7. @property int sid;  
    8. @property (nonatomic,retain)NSString *name;  
    9. -(void)print;  
    10. -(void)setSid:(int)sid andName:(NSString*)name;  
    11.   
    12. @end  

    Student.m

    [cpp] view plaincopy
     
    1. #import "Student.h"  
    2.   
    3. @implementation Student  
    4. @synthesize sid,name;  
    5. -(void)print{  
    6.     NSLog(@"我的学号是:%i,我的名字是:%@",sid,name);  
    7. }  
    8. -(void)setSid:(int) sid1 andName:(NSString *)name1{  
    9.     self.sid=sid1;  
    10.     self.name=name1;  
    11. }  
    12. @end  

    Member.h

    [cpp] view plaincopy
     
    1. #import <Foundation/Foundation.h>  
    2.   
    3. @interface Member : NSObject{  
    4.     NSString *name;  
    5.     int age;  
    6. }  
    7. @property (nonatomic,retain)NSString *name;  
    8. @property int age;  
    9. -(void)print;  
    10. -(void)setName:(NSString*)name1 andAge:(int)age1;  
    11.   
    12. @end  

    Member.m

    [cpp] view plaincopy
     
    1. #import "Member.h"  
    2.   
    3. @implementation Member  
    4. @synthesize name,age;  
    5. -(void)print{  
    6.     NSLog(@"我的名字是:%@,我的年龄是%i",name,age);   
    7. }  
    8. -(void)setName:(NSString *)name1 andAge:(int)age1{  
    9.     self.name=name1;  
    10.     self.age=age1;  
    11. }  
    12. @end  


    主函数main.m里:

    [cpp] view plaincopy
     
    1. id fo;  
    2.         NSLog(@"%lu",sizeof(fo));  
    3.         Member *member1=[[Member alloc]init];  
    4.         [member1 setName:@"Sam" andAge:36];  
    5.         id data;  
    6.         data=member1;//由于id类型的通用性质,我们可以将创建好的对象赋值给data;  
    7.         [data print];  
    8.           
    9.         Student *student1=[[Student alloc]init];  
    10.         [student1 setSid:1122334455 andName:@"Lee"];  
    11.         data=student1;  
    12.         [data print];  


    运行结果:

    2012-03-27 14:41:01.768 HelloWorld[440:707] 8

    2012-03-27 14:41:01.769 HelloWorld[440:707] 我的名字是:Sam,我的年龄是36

    2012-03-27 14:41:01.769 HelloWorld[440:707] 我的学号是:1122334455,我的名字是:Lee

    注:id 类型可以通过类型转化符可以将一般的id 类型的对象转换成特定的对象。
     
    看上面程序中有@property和@synthesize修饰;

    @property和@synthesize,在接口文件中使用@property来标识属性(一般是实例变量),在实现文件中使用@synthesize标识所声明的属性,让系统自动生成设置方法和获取方法.

    格式:@property (属性列表)实例变量,

     

    (二)枚举数据类型、typedef 语法以及数据类型的转换和C 是一样。    

    (三)BOOL布尔值:

    布尔值为YES/NO,或1/0.假是0;这个没什么好说的

    (四)sel选择器

    选择器就是指向方法的一个指针,可以简单理解为程序运行到这里就会执行指定的方法;

    (五)nil和Nil

    nil和C语言的NULL相同。nil表示一个Objctive-C对象,这个对象的指针指向空(没有东西就是空)。

    而Nil首字母大写的Nil和nil有一点不一样,Nil定义一个指向空的类(是Class,而不是对象)。

    (六)IMP

    IMP是一个指向函数的指针,这个被指向的函数包括id(“self”指针),调用的SEL(方法名),再加上一些其他参数。

    说白了IMP就是实现方法。

     (六)class

    与java类似,你可以使用class类来获得一个对象所属的类

  • 相关阅读:
    工作也是一样,认真对待,你是在为自己工作
    程序员学习能力提升三要素(转载)
    该读些啥书
    每个程序员都应读的书
    微博时光机定时发送微博
    WordPress快速建站
    Tweenlite的用法
    Away3D粒子系统中文快速上手指南
    操盘手 李彪 照片[转]
    URLClassLoader加载class到当前线程类加载器【zt】
  • 原文地址:https://www.cnblogs.com/wcLT/p/4208316.html
Copyright © 2011-2022 走看看