zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    golang 数据结构 优先队列(堆)
    leetcode刷题笔记5210题 球会落何处
    leetcode刷题笔记5638题 吃苹果的最大数目
    leetcode刷题笔记5637题 判断字符串的两半是否相似
    剑指 Offer 28. 对称的二叉树
    剑指 Offer 27. 二叉树的镜像
    剑指 Offer 26. 树的子结构
    剑指 Offer 25. 合并两个排序的链表
    剑指 Offer 24. 反转链表
    剑指 Offer 22. 链表中倒数第k个节点
  • 原文地址:https://www.cnblogs.com/wodehao0808/p/3592083.html
Copyright © 2011-2022 走看看