1

この次のコードを実行すると、上記のエラーが発生します

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{


   self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];

    [self.window makeKeyAndVisible];

    self.viewController = [[ViewController alloc] initWithNibName:nil bundle:nil];
    self.firstViewController=[[FirstViewController alloc]initWithNibName:nil bundle:nil];
    UINavigationController *localNavigationController=[[UINavigationController alloc]initWithRootViewController:self.viewController];
    self.navigationController=localNavigationController;
    [localNavigationController release];
    UINavigationController *localFistNavigationController=[[UINavigationController alloc]initWithRootViewController:self.firstViewController];
    self.firstNavigationController=localFistNavigationController;
    [localNavigationController release];
   NSArray *twoBars=[[NSArray alloc]initWithObjects:self.navigationController,self.firstNavigationController, nil];
    UITabBarController *localTAbBarController =[[UITabBarController alloc]init];
    [localTAbBarController setViewControllers:twoBars];
    self.tabBarController=localTAbBarController;
    [localTAbBarController release];
    [self.window addSubview:self.tabBarController.view];

        return YES;
}

次のコードを実行すると、うまく実行されます

self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
         [self.window makeKeyAndVisible];

    self.viewController = [[ViewController alloc] initWithNibName:nil bundle:nil];
    self.firstViewController = [[FirstViewController alloc] initWithNibName:nil bundle:nil];

    self.navigationController = [[UINavigationController alloc]
                                 initWithRootViewController:self.viewController];

    self.firstNavigationController=[[UINavigationController alloc]initWithRootViewController:self.firstViewController];
    NSArray *twoBars=[[NSArray alloc]initWithObjects:self.navigationController,self.firstNavigationController, nil];

    self.tabBarController=[[UITabBarController alloc]init];
    [self.tabBarController setViewControllers:twoBars];

       [self.window addSubview:self.tabBarController.view];



    return YES;

私はこれらの違いが何であるかを理解していません。最初のものでは、ローカル変数を作成し、それらをプロパティに割り当てました。後で、プロパティを直接使用しました。エラープログラム受信信号「EXC_BAD_ACCESS」が発生する理由

4

4 に答える 4

2

最初にいくつかのコードをリリースし、次にリリースした後、次のようなオブジェクトをもう一度リリースすると思います。

[localTAbBarController release];これ。だから、エラープログラムを受け取ったのはそのためかもしれません

信号「EXC_BAD_ACCESS」。2つ目では、オブジェクトをリリースせずにうまく使用するので、その作業は

大丈夫。

于 2012-12-28T07:25:25.900 に答える
1

アップデート:

ねえ、私はあなたのコードを使用します、ここであなたはこの次の行でBAD_ACCESSを取得します。

[localNavigationController release];

コメントするだけで、BAD_ACCESSはありません

于 2012-12-28T07:37:29.303 に答える
0

答えが出ました。同じオブジェクトを複数回リリースするため、それが発生します。私は[localNavigationController release];2回リリースしました。後でそれはする必要があります

[localFirstNavigationController release];
于 2012-12-28T08:47:46.873 に答える
0

この行を確認してください。

self.firstNavigationController=localFistNavigationController;
  -->>  [localNavigationController release];  

そのはず[localFistNavigationController release];

于 2012-12-28T15:17:25.933 に答える