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

简介: 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;
}


相关文章
|
10天前
类的实例化过程在ES6中是如何优化的?
类的实例化过程在ES6中是如何优化的?
|
7月前
|
编译器 数据安全/隐私保护 C++
【类与对象】封装&对象的初始化及清理
【类与对象】封装&对象的初始化及清理
|
7月前
|
存储 Java
|
7月前
|
设计模式 缓存 安全
代理模式:解析对象间的间接访问与控制
代理模式:解析对象间的间接访问与控制
|
存储 算法 Java
10-对象的实例化内存布局与访问定位
10-对象的实例化内存布局与访问定位
104 0
10-对象的实例化内存布局与访问定位
|
设计模式
单子设计模式 (对创建初始对象为静态,构造函数私有,返回值为对象的创建函数,private应用)
单子设计模式 (对创建初始对象为静态,构造函数私有,返回值为对象的创建函数,private应用)
单子设计模式 (对创建初始对象为静态,构造函数私有,返回值为对象的创建函数,private应用)
|
Python
Python编程:类的实例动态增加属性和方法
Python编程:类的实例动态增加属性和方法
148 0
|
存储 JavaScript 前端开发
访问对象的属性,你知道有哪些方法?
相信对象对于每个使用JavaScript的人来说都不陌生。访问对象的属性几乎日常开发每天都在用。下面我们一起探索下有哪些方式可以实现属性的访问。
201 0
|
Java
类于对象及静态与实例
类与对象:                类,有分类的意思并 、不是一个对象就一个类,发现他们的共同属性和方法,集合在一起,申请一个类。                对象的模板、一个类可以产生很多个对象                对象是虚拟的,要想在代码中实现出来就必须申请类 类的声明举例:...
1017 0
|
Java
前面学习通过方法对代码进行改进,为什么要给方法使用静态呢?
前面学习通过方法对代码进行改进,为什么要给方法使用静态呢?   答:因为main方法是静态的,而静态方法只能访问静态的成员变量和静态的成员方法。   所以之前我们的方法是使用静态来修饰的,即静态的方法。
1091 0