zoukankan      html  css  js  c++  java
  • Object C学习笔记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
    @interface中使用@property

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

    #import "MyCar.h"
    
    @implementation MyCar
    
    @synthesize value;
    @synthesize fValue;
    @synthesize carName;
    @synthesize en;
    
    @end
    在@implementation中使用@synthesize

      4 @property中的attribute简单介绍

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

      readwrite-可读可写(默认)。

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

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

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

      nonatomic-默认為atomic。

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

  • 相关阅读:
    Win10 VMware虚拟机无法打开内核设备“\.Globalvmx86“
    搜索算法总结
    经典排序算法
    Markdown Test
    PAT L2-020 功夫传人【BFS】
    PAT l2-018 多项式A除以多项式B 【多项式+模拟】
    PAT l2-010 排座位 【并查集】
    二叉树的前中后序遍历关系 【非原创】
    PAT L2-005. 集合相似度 【stl set】
    PAT L2-004. 这是二叉搜索树吗?【前序遍历转化为后序遍历】
  • 原文地址:https://www.cnblogs.com/qingyuan/p/3532016.html
Copyright © 2011-2022 走看看