• Object C学习笔记3-对象的使用和定义


    Object C学习笔记3-对象的使用和定义

    2014-01-24 09:56 by 贺臣, 621 阅读, 3 评论, 收藏, 编辑

      1. 如何定义一个对象

      在面向对象的语言中,定义一个对象是使用Class关键字,而在Object-C中则是使用@interface,@interface用于定义对象的属性和方法,@implementation则用于对象的详细描述。@interface放在.h文件中,而@implementation放在.m的文件中。Object-C中的对象和java,.NET中的对象还是有区别的,其实它更加像C中的指针。

      首先我们定义一个@interface 的对象,代码如下

    #import <Foundation/Foundation.h>
    
    @interface Engine : NSObject
    {
        int age;
        NSString* name;
    }
    
    -(void) setAge:(int)myage;
    -(int) getAge;
    
    -(void) setName:(NSString*)myname;
    -(NSString*) getName;
    
    @end
    @interface 代码

      然后再看看@implementation具体对象详细

    #import "Engine.h"
    
    @implementation Engine
    
    -(void) setAge:(int)myage
    {
        age=myage;
    }
    -(int) getAge
    {
        return age;
    }
    
    -(void) setName:(NSString*)myname
    {
        name=myname;
    }
    -(NSString*) getName
    {
        return  name;
    }
    
    @end
    @implementation 代码

      这里要说明一下,感觉这段代码的声明感觉有点像.NET或者Java中的接口和接口的实现,的确是这样的。在Object-C中这是类的定义方法,至于接口的定义是使用其他的方式来定义的,后面再说明。

      在定义对象的时候,我们定义了对象的get 和 set方法,这点和面向对象语言方式一样。但是get/set方法的定义太麻烦,还有更加简单的方式在下面介绍.

      2. 对象的使用

      在使用对象之前我们需要先实例化一个对象实例,实例化对象实例有两种方式:

      (1) [对象 new]   如 Engine* en=[Engine new];

      (2) [[对象 alloc] init]  如 Engine* en=[[Engine alloc] init];

      看看下面这段测试代码

    复制代码
    Engine* en=[[Engine alloc] init];
            [en setAge:88];
            [en setName:@"hechen"];
            
            int age=[en getAge];
            NSString* name=[en getName];
            
            NSLog(@"------------直接输出赋值---------------");
            NSLog(@"age:%i ; name:%@",age,name);
            
            NSLog(@"------------直接输出赋值---------------");
            NSLog(@"age:%i ; name:%@",[en getAge],[en getName]);
    复制代码

      3. @property 的使用

      @property是一种代码生成机制,能够生成不同类型的getter和setter方法。如果在Object-C中想要用. 操作来获取对象属性值和属性设置值就要使用@property.

      @property使用的语法规则如下:

      @property(attribute1,attribute2) type value;

      如: @property (nonatomic) NSString* carName;

      @property 要和@synthesize一同使用,测试代码如下:

    复制代码
    #import <Foundation/Foundation.h>
    #import "Engine.h"
    
    @interface MyCar : NSObject
    {
        int value;
        float fValue;
        NSString* carName;
        Engine* en;
    }
    @property (nonatomic) int value;
    @property (nonatomic) float fValue;
    @property (nonatomic) NSString* carName;
    @property (retain) Engine* en;
    
    @end
    复制代码

      在详细的描述代码中使用@synthesize 测试代码如下:

    复制代码
    #import "MyCar.h"
    
    @implementation MyCar
    
    @synthesize value;
    @synthesize fValue;
    @synthesize carName;
    @synthesize en;
    
    @end
    复制代码

      4 @property中的attribute简单介绍

      readonly-只读,只能读取而不能设定值(不能用setXXXX的函式)。

      readwrite-可读可写(默认)。

      assign-在设值时替换新旧变量(默认)。

      retain-在设值时retain新的变量,release旧变量。

      copy-在设值时copy一份新变量,release旧变量。

      nonatomic-默认為atomic。

      简单介绍一下对象@property中attribute的几个属性值,后面详细介绍其区别

    转载于:http://www.cnblogs.com/qingyuan/p/3532016.html

  • 相关阅读:
    强烈推荐好用的文本编辑器Notepad++
    MSP430学习笔记9PS2键盘解码
    MSP430学习笔记8ST7920 12864液晶显示并行接口
    MSP430学习笔记74*4键盘的对应数码管显示
    MSP430学习笔记6动态数码管的显示
    MSP430寄存器中文注释
    MSP430学习小结3MSP430基本时钟模块
    ST7920 12864液晶图片取模,显示你想显示的图片。
    MSP430学习小结2程序主体结构安排及低功耗转载
    Windows Phone开发之路(4) XAML基础(上)
  • 原文地址:https://www.cnblogs.com/wodehao0808/p/3592083.html
Copyright © 2020-2023  润新知