Advertisement

Object-C学习笔记之基础知识一

阅读量:

Object-C基于C语言发展而来,并具备全部C语言特性;然而它并非直接继承自C语言特有的属性。

首先我们先通过例子来说明Object-C中的一些基本语法:

复制代码
    #import <Foundation/Foundation.h> 
    
    @interface Print : NSObject{ //Objective-c的所有类都继承于NSObject 
    
    // 成员属性
    NSString *caption; 
    NSString *photographer;
    
    } 
    
    //在Objective-C 2.0引入了属性合成,相当于之前的get/set方法 
    
    @property(nonatomic, copy) NSString *caption; 
    @property(nonatomic, copy) NSString *photographer; 
    
    //类方法
    + (NSString*) printName: (NSString *)name;
    //实例方法
    - (NSString*) printSize: (NSString *)size;
    //无参实例方法
    -(NSString*) printSize;
    //多参实例方法
    -(BOOL) print: (NSString *)size setlength: (int)length;
    
    @end

上面代码展示了如何在Object-C声明一个类,其中也涉及到了少许继承:

Object-C声明一个类以@interface 开始,以@end 结束;

Print 为所声明的类,继承自NSObject 类;

复制代码
    //类方法
    + (NSString*) printName: (NSString *)name{
     }
    //实例方法
    - (NSString*) printSize: (NSString *)size{
     }
    //无参实例方法
    -(NSString*) printSize;
    //多参实例方法
    -(BOOL) print: (NSString *)size setlength: (int)length{
    }

相当于Java中的:

复制代码
    public static String printName(String name){
    }
    public String printSize(String size){
    }
    public String printSize(){
    }
    public Boolean print(String size,int length){
    }

首先必须摒弃以前学习面向对象语言时形成的固有思维,在Objective-C语言中并不存在public和private关键字的概念——所有的访问权限都是public属性;它仅包含静态方法与动态方法两类别——加号表示静态方法(静态函数),这些函数可以直接被调用而无需先创建对应对象;减号代表动态方法(动态函数),这类函数只能在创建了对应对象之后才能被调用。
在处理返回值类型方面需要注意以下几点——(void)与(BOOL)分别代表不同的返回类型;那么问题来了——请问 BOOL 类型与Java语言中的 Boolean 类型是否一致呢?答案是否定的:

  • 首先 BOOL 在内存占用上有所不同——它采用的是8位存储机制——其中YES被赋值为二进制码中的1(即十进制数值为1),NO则被赋值为二进制码中的0(即十进制数值为0)——如果误将超出8位范围的数据赋给 BOOL 类型变量,则会自动截断高位部分;
  • 另外需要注意的一点是——在Objective-C编程中存在一个潜在的逻辑错误——即不应该将布尔型变量与布尔常量YES直接进行比较运算;
    引用转载自:www.cnblogs.com/moonvan

/archive/2011/10/13/2210498.html

复制代码
    //使用@implementation开始和@end结束实现类的内容
    @implementation Print
    
    @synthesize photographer;
    @synthesize caption;
    
    //方法实现
    +(NSString *)printName{
    return @"Print Result";
    }
    -(NSString *)printSize 
    //......用法差不多
    
    @end

之后,就是如何调用的问题了:

复制代码
    int main(int argc, const char * argv[]){
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 
    
    //实例化类的对象
    Print * pt = [[Print alloc]init]
    
    //方法的使用
    NSString * a = [self printName:@"名字"];
    NSString * b = [pt printSize:@"尺码"];
    NSString * c = [pt printSize];
    BOOL d =[pt print:@"名字" setlength:10];
    
    //属性的使用
    //设置器调用
    [pt setCaption:@"haha"];
    [pt setPhotographer:@"hehe"];
    //获取器调用
    NSString * haha = [pt getCaption];
    NSString * hehe = [pt getPhotographer];
    //输出
    NSLog(@"%@", haha);
    NSLog(@"%@", hehe);
    
    [pt release];
    
    [pool drain];
    return 0;
    }

全部评论 (0)

还没有任何评论哟~