对象的动态和静态构造创建的区别
2013-07-29 12:38
176 查看
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;
}
#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;
}
相关文章推荐
- 对象的动态和静态构造创建的区别
- OC对象的动态和静态构造区别
- Spring开发之静态工厂创建对象+动态工厂创建对象+构造方法创建对象+set方法注入+构造方法注入
- OC对象的动态和静态构造区别
- String字面值对象和构造方法创建对象的区别的两个有关==和equals的面试题。
- 不可或缺 Windows Native (19) - C++: 对象的动态创建和释放, 对象的赋值和复制, 静态属性和静态函数, 类模板
- JSP 笔记(三: 域对象总结 ,静态包含和动态包含的区别 )
- jsp本质,jsp静态导入与动态导入区别,jsp九个内置对象,jsp传值
- String字面值对象和构造方法创建对象的区别:String s = new String("hello")和String s = "hello";的区别
- OC中静态构造和动态构造的区别
- java语言基础(53)——String 字面值对象和构造方法创建对象的区别
- 代码块的解释,构造代码块,静态代码块,静态常量和常量以及静态成员变量和对象成员变量的区别
- OC中静态构造和动态构造的区别
- 1.import和include区别 2.NSLog 和printf区别 3.创建对象做的事情 4. 类和对象方法比较 5 匿名对象优缺点 6. 封装 7.作用域范围 8.id和instancetype 9.自定义构造方法规范 10.nil和Nil及NULL、NSNull区别
- 1105 Java中String字面值对象和构造方法创建对象的区别
- 控制对对象的访问——代理模式详解(静态代理和动态代理的区别以及联系)
- C++实现只能动态或者静态创建对象
- 创建DLL文件 以及 动态加载和静态加载 以及两者之间的区别
- java面试题:String字面值对象和构造方法创建对象的区别
- 数组和指针、数组指针和指针数组、函数指针和指针函数、数组标识符的意义、静态和动态创建的数组的本质区别、标识符类型判断方法