我需要弄清楚有关Objective-C内存管理的知识:
如果我在类头文件中将一个对象声明为不带@property的ivar:
@interface MyFacebooDelegate : UIViewController
{
TableViewController *tableController;
}
...
@end
还有一些我在
- (void)viewDidLoad
中的代码中的位置:tableController = [[TableViewController alloc] init];
所以哪里是释放它的最佳方法。如果我将即时对象设为属性会怎样?以及如何进行内存管理
@interface MyFacebooDelegate : UIViewController
{
TableViewController *tableController;
}
...
@end
@property (nonatomic, strong) TableViewController *tableController;
以下语法对对象viewController的作用是什么:
。H
@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong, nonatomic) ViewController *viewController;
@end
.m
@implementation AppDelegate
@synthesize window = _window;
@synthesize viewController = _viewController;
- (void)dealloc
{
[_window release];
[_viewController release];
[super dealloc];
}
.....
@end
如果我想通过方法将对象返回到另一个类,是否需要先在方法主体中对其进行
autorelease
,然后在接收方对它进行retain
?例如,此方法在方法主体中以及在接收器端也要执行的操作:
-(NSString *)getFriendId
{
NSArray *ar = [NSArray arrayWithObjects:@"1",@"2",@"3", nil];
return [ar objectAtIndex:0];
}
我知道很多,但我很困惑,需要您的帮助。
最佳答案
1)最好的方法是在dealloc中;或在重新设置之前。
2) property 为您保留/释放。但是警告!你一直在混乱。您在此处使用与ARC相关的“strong”。如果您真的坚持使用经典的保留/释放(不应该),请改用(非原子的,保留)。
3)您的属性在dealloc上释放。同样,强在这里是错误的。
4)是的。理想情况下,您应该。 ARC出色的另一个原因是,它会自动为您完成所有操作。
tl; dr:使用ARC。永不回头。 (但仍要学习手动内存管理)