对象的动态和静态构造创建的区别

简介: Student.h: #import @interface Student : NSObject@property(nonatomic,retain) NSString * name;@property(nonatomic,assign) int age;@end Student.

Student.h:

#import <Foundation/Foundation.h>

@interface Student : NSObject

@property(nonatomic,retain) NSString * name;

@property(nonatomic,assign) int age;

@end

Student.m:

#import "Student.h"
@implementation Student
//动态方法,在main函数中类alloc了之后调用,但是要手动管理内存,要手动释放
-(id) initWithAge:(int)age{
    if (self == [super init]) {
        _age = age;
    }
    return self;
}

//静态构造方法,在main函数中不需要你手动管理内存释放
+(id)studentWithAge:(int)age{
    Student *stu = [[[Student alloc] init] autorelease];\
    stu.age = age;
    return stu;
}

-(NSString *)description{
    return [NSString stringWithFormat:@"name:%@ age:%i创建了",_name,_age];
}

-(void)dealloc{
    NSLog(@"name:%@ age:%i被释放了",_name,_age);
    [_name release];
    [super dealloc];
}
@end

main:

#import <Foundation/Foundation.h>
#import "Student.h"

int main(int argc, const char * argv[])

{
    @autoreleasepool {

        //动态方法需要手动释放内存

        Student *stu1= [[Student alloc] initWithAge:10];

        stu1.name = @"dingxiaowei";

        NSLog(@"%@",stu1);

        [stu1 release];

        //静态构造方法不需要你管理内存

        Student *stu2 =[Student studentWithAge:20];

        stu2.name = @"wangning";

        NSLog(@"%@",stu2);

    }

    return 0;
}


相关文章
|
1月前
|
存储 Java
|
8月前
|
安全 编译器 C++
【C++】影响动态多态的静态联编与对象切割
在使用C++动态多态时,有时候会出错误,这里讲述其中的两个原因
35 0
【C++】影响动态多态的静态联编与对象切割
|
10月前
|
Java 编译器
对象的构造及初始化
对象的构造及初始化
58 0
|
10月前
|
Java 编译器
深入探索: 对象构造的隐藏功能与技巧
深入探索: 对象构造的隐藏功能与技巧
73 0
|
存储 算法 Java
10-对象的实例化内存布局与访问定位
10-对象的实例化内存布局与访问定位
76 0
10-对象的实例化内存布局与访问定位
|
设计模式
单子设计模式 (对创建初始对象为静态,构造函数私有,返回值为对象的创建函数,private应用)
单子设计模式 (对创建初始对象为静态,构造函数私有,返回值为对象的创建函数,private应用)
单子设计模式 (对创建初始对象为静态,构造函数私有,返回值为对象的创建函数,private应用)
|
Python
Python编程:类的实例动态增加属性和方法
Python编程:类的实例动态增加属性和方法
103 0
|
存储 JavaScript 前端开发
访问对象的属性,你知道有哪些方法?
相信对象对于每个使用JavaScript的人来说都不陌生。访问对象的属性几乎日常开发每天都在用。下面我们一起探索下有哪些方式可以实现属性的访问。
152 0
【Groovy】MOP 元对象协议与元编程 ( Expando 动态类 | 创建动态类 | 为动态类增加字段和方法 )
【Groovy】MOP 元对象协议与元编程 ( Expando 动态类 | 创建动态类 | 为动态类增加字段和方法 )
152 0
【Groovy】MOP 元对象协议与元编程 ( Expando 动态类 | 创建动态类 | 为动态类增加字段和方法 )
|
Java
类于对象及静态与实例
类与对象:                类,有分类的意思并 、不是一个对象就一个类,发现他们的共同属性和方法,集合在一起,申请一个类。                对象的模板、一个类可以产生很多个对象                对象是虚拟的,要想在代码中实现出来就必须申请类 类的声明举例:...
982 0