周总结:静态全局变量的修改

18 views
Skip to first unread message

[广州]Napolen

unread,
Dec 16, 2011, 5:16:01 AM12/16/11
to iOS development
这周忙乎乎的又过去了,现在来写些这周工作学习中遇到的问题总结吧。

问题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
请问这是怎么回事?

Reply all
Reply to author
Forward
0 new messages