我需要弄清楚有关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。永不回头。 (但仍要学习手动内存管理)

10-08 05:31