Firstly your approach of is correct. UINavigationController is an stack of more than one viewcontroller.
-(IBAction)goToPath1:(id)sender{
path1ViewController *path1VC = [[path1ViewController alloc] init];
[self.navigationController pushViewController: path1VC];
}
Above lines are correct if you are using/enabled ARC in your project. Your memory management doing automatically by compiler.
If you choose non-ARC approach then you have to release your view-controller after pushing it into navigation controller stack then your code will be,
-(IBAction)goToPath1:(id)sender{
path1ViewController *path1VC = [[path1ViewController alloc] init];
[self.navigationController pushViewController: path1VC];
[path1VC release];
}
In non-ARC way you must handle memory management manually.