01. Objective-C面向对象编程

1. 面向对象编程

用解决现实中的问题的办法来解决计算机问题。

1.1 对象

Anything is Object. 万物皆对象。

现实中对象是一种客观的存在,程序中对象是一片内存空间。

对象之间各司其职,各尽所能,对象功能单一。对象之间通过发消息来互相合作,形成一个系统。

对象

有什么      属性

能干什么   方法

1.2 类

就是类型,这儿理解为用户自定义的类型。

          int double float ... 基本数据类型

          TRDate ...               用户自定义类型

类是一种主观的认识,是对我们需要解决的问题的一种抽象,是创建对象的模型。 

1.3 定义类

    @interface 类名 : NSObject

         属性的定义

         方法的声明

    @end

    让类继承NSObject是因为需要类拥有相应的能力,比如内存分配能力等。

    @implementation 类名

         方法的定义

    @end

1.4 创建对象

    类名* obj = [类名 alloc];

    [obj 消息]; //给对象发消息

    对象收到消息会调用方法。方法其实是一种特殊的函数。


2. 内存分配

    OC中的对象全部放在堆中。 要使用堆中的对象,必须使用指针指向对象。经常把这个指针叫"引用"。要让对象工作,就给对象发消息,如果对象响应消息,就会调用对应的方法。消息是通过引用发的。

    堆内存,分配和释放不是自动的,而是由程序控制的。

    堆里放的是对象,栈里放的是引用,引用指向了对象。



3. 实际开发中类定义的文件分离

              一个类,一般会分成两个文件,一个.h,一个.m。

              .h文件中定义类的interface部分,.m文件中定义类的implementation部分。类名和文件名应该保持一致。

//以下代码在XCode下编写main.m

#import <Foundation/Foundation.h>
@interface MyFirstClass : NSObject   //继承NSObject,是所有类的老祖宗,分配内存空间
@Property int prop1;    //属性的定义
- (void) method1;      //方法的声明
@end

//实现部分
@implementation MyFirstClass
- (void) method1
{
NSLog(@"我是一个方法");
}
@end


@interface TRDog : NSObject  //狗类
@property NSString *name;    //OC语言特有的类型,用户自定义类型需指针
- (void)bark;
@end

@impementation TRDog
-(void)bark
{
NSLog(@"%@在旺旺的叫", self.name);   //%@打印字符串
}
@end

TRDog* getDog()
{
        TRDog *dog = [TRDog alloc];
        dog.name = @"小Mu";
        return dog;  //对象在堆中,可以返回
}

int main(int argc, const char* argv[])
{
@autoreleasepool{
MyFirstClass *obj = [MyFirstClass alloc];   //对象的创建
[obj method1];   //调用方法
TRDog *dog = [TRDog alloc];
dog.name = @"旺财";
[dog bark];
TRDog *dog2 = getDog();
[dog2 bark];
//[obj release];  //编译器会自动写上
//[dog release];
//[dog2 release];
}
return 0;
}


//重新新建一个文件TREmployee.h,定义一个employee类
#import <Foundation/Foundation.h>
//类的接口部分
@interface TREmployee : NSObject
//定义属性
@property NSString *name;
@property int age;
@property BOOL gender;
@property double salary;
//声明部分
- (void) show;
@end

//新建一个文件TREmployee.m,写implementation部分
#import "TREmployee.h"    //需import
@implementation TREmployee
- (void) show
{
        NSLog(@"%@,%@,%d,%.2lf", self.name, self.gender?@"男":"女", self.age, self.salary);
}
@end

//main.m中:
#import "TREmployee.h"
void test2()
{
        TREmployee *e = [TREmployee alloc];
        e.name = @"Daniel";
        e.age = 30;
        e.gender = YES;
        e.salary = 123456.78;
        [e show];
        //[e release];        
}

int main(int argc, const char* argv[])
{
@autoreleasepool{
test2();
}
return 0;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值