分配给 iphone sdk 中已分配的变量
Posted
技术标签:
【中文标题】分配给 iphone sdk 中已分配的变量【英文标题】:allocating to already allocated variable in iphone sdk 【发布时间】:2012-02-09 09:39:25 【问题描述】:我想为我已经分配的变量分配内存。例如
self.m_tabbarController = [[TabbarController alloc] init];
我必须为上面的标签栏控制器更改分配的视图控制器。所以我必须释放 上面并为新的控制器分配相同的标签栏。如何释放和分配 新的。如果我执行以下操作,会导致 ios5 崩溃
if(self.m_tabbarController != nil)
[self.m_tabbarController release];
self.m_tabbarController = [[TabbarController alloc] init];
但是 self 变量必须在 dealloc 方法中解除。请帮忙吗?如果我也喜欢跟随,它会崩溃吗?
m_tabbarController = [[TabbarController alloc] init];
[self.window addSubview:m_tabbarController ];
[m_tabbarController release];
【问题讨论】:
【参考方案1】:试试这个
在.h中声明“my_tabBarController”,
@property(nonatomic,retain)my_tabBarController;
在.m
@synthesize my_tabBarController;
如果你想分配新的视图控制器,只需创建另一个 TabbarController 实例并将其分配给现有的。
TabbarController *secondTabBar=[[TabbarController alloc]init];
self.my_tabBarController=secondTabBar;
[secondTabBar release];
别忘了在 dealloc 中释放 my_tabBarController
【讨论】:
【参考方案2】:要重新分配@property
类型的@property
,您不能显式释放它
//this is wrong
if(self.m_tabbarController != nil)
[self.m_tabbarController release];
/////////////////////
只有这一行可以正常进行重新分配。
self.m_tabbarController = [[TabbarController alloc] init];
原因是->对于一个(retain)
属性,当我们做self.obj = nil or (new allocation)时,意思是
[obj release];
obj = nil or (new allocation)
您的应用程序正在崩溃,因为m_tabbarController
由于显式和隐式释放而面临双重释放。您第一次通过[self.m_tabbarController release];
显式调用release 并且下一次隐式释放发生在分配self.m_tabbarController = [[TabbarController alloc] init];
时发生
【讨论】:
我已经为“self.m_tabbarController”分配了。我该怎么做 self.m_tabbarController = [[TabbarController alloc] init]; 备份我的答案,这里是链接:***.com/questions/1210776/…,你应该在你的基础上多做一点,让它们变得更强大。祝你好运!以上是关于分配给 iphone sdk 中已分配的变量的主要内容,如果未能解决你的问题,请参考以下文章
Iphone Sdk:UIPickerView,可以为不同的组件分配不同的字体大小吗?