1、工厂方法 是程序设计中一个经典的设计模式,指的是基类中只定义创建对象的接口,将实际的实现推迟到子类中。在这里,我们将它稍加推广,泛指一切生成并返回一个对象的静态函数。一个经典的工厂方法如同这样:
1
2
3
4
5
6
7
|
CCObject* factoryMethod() { CCObject* ret = new CCObject();
//这里对ret对象进行必要的初始化操作
ret->autorelease();
return ret;
} |
2、关于对象传值
将一个对象赋值给某一指针作为引用的时候,为了遵循内存管理的原则,我们需要获得新对象的引用权,释放旧对象的引
用权。此时,release()和retain()的顺序是尤为重要的。当other和object实际上指向同一个对象时,第一个release()可能会触发该对象的回收,这显然不是我们想看到的局面,所以应该先执行retain()来保证other对象有效,然后再释放旧对象:
1
2
3
4
5
6
|
void SomeClass::setObject(CCObject* other)
{ other->retain();
this ->object->release();
this ->object = other;
}
|