问题1:我定义一个静态的全局变量,然后某个函数中需要改变时候,这时内存怎么办?什么时候释放?
举个例子:我刚开始做是这样的:
声明 static nsstring *name=@"aa";
-(void)changeName:(nsstring *)a
{
name = a;
//name = [a retain];//这时我应该什么时候释放内存呢?我不知道
}
这时侯下次再用这个name时是什么值呢?
比如:
-(void)getName
{
nslog(@"-a--------------%@",name);//这时name是一个飘忽的不定值,什么都有可能,因为在上面改变的时
候,它的内存被释放了
}
而我想改变这个name的值怎么做呢?
我就想用一种跟单例很类似的方法去做,来达到我想要的效果
声明 static nsstring *name;
+(nsstring *)getName
{
if(!name)
{
name = [[nsstring alloc] initwithstring:@"aa"];
}
retrun name;
}
这时就可以随便的改变name,而不必担心内存释放问题了
-(void)changeName:(nsstring *)a
{
if(name)
{
[name release];
name = nil;
}
name = [a retain];
}
----------------------------------------------------------------------
问题2:我是在@interface中声明了 nsstring *a;没有用@property;然后在
void func1{
nslog(@"------a1------------%@",a)
if(!a)
a =[ [nsstring alloc] initwithstring:@"aa"];
}
void func2{
nslog(@"------a2------------%@",a);
if(!a)
a =[ [nsstring alloc] initwithstring:@"aa"];
}
在void func3:(nsstring *)b{
if(a)
{
[a release];
a = nil;
}a = [b retain];
nslog(@"------a3------------%@",a);
}
结果是,
------a2-----------(null)
------a3-----------bb
------a1-----------bb
------a2-----------(null)
调用顺序是func2,func3,fun1,func2
请问这是怎么回事?