Open xinrong2019 opened 5 years ago
Person.h
#import <Foundation/Foundation.h>
@interface Person : NSObject
{
@public
NSString *_name;
}
+ (instancetype)person;
- (void)work;
@end
Person.m
#import "Person.h"
@implementation Person
- (void)dealloc
{
NSLog(@"person<%p>被销毁",self);
[super dealloc];
}
+ (instancetype)person
{
Person *person = [[[self alloc] init] autorelease];//调用autorelease,在@autoreleasepool {}内执行后就会自动释放
return person;
}
- (void)work
{
NSLog(@"%@在工作",_name);
}
@end
调用autorelease,在@autoreleasepool {}内执行后就会自动释放。
main.m
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
Person *person = [Person new];//MRC下,出现new,需要使用release销毁,否则会造成内存泄露
[person work];
[person release];
//ARC下,会自动调用dealloc方法销毁
// [person release];//程序抛出异常,访问了一个非法的内存地址
Person *person1 = [Person person];
[person1 work];
}
return 0;
}
输出结果
2019-05-28 10:12:52.932089+0800 OCIntroduce[2106:98285] (null)在工作
2019-05-28 10:12:52.932223+0800 OCIntroduce[2106:98285] person<0x102805160>被销毁
2019-05-28 10:12:52.932238+0800 OCIntroduce[2106:98285] (null)在工作
2019-05-28 10:12:52.932248+0800 OCIntroduce[2106:98285] person<0x102805160>被销毁
OC手动内存管理
IOS4.0以后不需要手动管理内存,但是为了了解内存管理机制,有必要学习。
OC内存管理原则
MRC的使用
OC内存管理原则
在XCode中,开启MRC手动内存管理,默认是自动,学习完后记得改回来。
release
Person.h
Person.m
main.m
输出结果