不务正业之OC(一)

有空就学学吧,写写APP吧,以后我会多写写OC相关文章,今天来个入门级的,其实也不算入门了,牵涉到@property和@synthesize使用,大家就随便看看吧.
Xcode4.3版本及以上不需要定义@synthesize,Xcode帮你搞定了

1、首先我们来定义一个Person类

类定义:

//
//  Person.h
//  Person
//
//  Created by Li Jie on 14-4-27.
//  Copyright (c) 2014年 stronghearted. All rights reserved.
//
 
#import <Foundation/Foundation.h>
 
//定义Person类继承NSObject,多说一句,OC不支持多重继承,和C++不一样,但OC可以通过类别来实现多重继承的功能
@interface Person : NSObject
{   
    //定义name、age两个实例变量,记住,类别是不支持实例变量的,只支持方法扩展
    NSString *name;
    NSInteger age;
}
//property就类似JAVA中我们经常用的set方法,叫做设置方法。大家还看到copy关键词,这样关键词还有很多:nonatimic,retain,assign,readonly,readwrite;copy创建新对象,引用计数+1,释放旧对象(说不完全,以后展开讲)
//@synthesize就类似JAVA中我们用的get方法,叫做访问方法
@property (copy) NSString* name;
@property  NSInteger age;
@end

类实现:

//
//  Person.m
//  Person
//
//  Created by Li Jie on 14-4-27.
//  Copyright (c) 2014年 stronghearted. All rights reserved.
//
 
#import "Person.h"
 
@implementation Person
@synthesize name;
@synthesize age;
//重写NSOjbect的init方法,调用本对象的initWithPersion来初始化实例变量,返回对象本身
- (id) init
{
    if (self = [self initWithPerson:@"luoxuan" setAge:31]) {
    }
 
    return (self);
 
}
 
- (id) initWithPerson: (NSString *) _name
             setAge: (NSInteger) _age
{
    if (self = [super init]) {
        name = _name;
        age = _age;
    }
    return (self);
}
//当NSLOG使用对象时,变会自动调用description方法,这边我们也写重写了descrition方法
- (NSString *) description{
    NSString *desc;
    desc = [[NSString alloc] initWithFormat:@"Person:name is %@,age is %ld", self.name,(long)self.age ];
    return desc;
}
@end

2、学过C的同学者知道,调用都是从main作为入口
main函数定义

//
//  main.m
//  Person
//
//  Created by Li Jie on 14-4-27.
//  Copyright (c) 2014年 stronghearted. All rights reserved.
//
 
#import <Foundation/Foundation.h>
//引入头文件
#import "Person.h"
 
int main(int argc, const char * argv[])
{
    //autorelaesepool  自动释放池,当我们alloc、new、copy、retain创建对象时,引用计数会加1,如果没有release,那就出现memory leak哦
    @autoreleasepool { 
        //创建person对象,并调用初始化方法
        Person *person = [[Person alloc] init];
        //打印person对象
        NSLog(@"%@",person);
    }
    return 0;
}

运行结果:

2014-04-27 15:02:20.375 Person[9104:303] Person:name is luoxuan,age is 31
Program ended with exit code: 0

Post a Comment