7 #include <Raym/Object.h>
8 #include <Raym/String.h>
9 #include <Raym/AutoreleasePool.h>
14 #ifdef RAYM_MEMORY_CHECK
15 int global_raym_count_ = 0;
16 int global_raym_init_count_ = 0;
17 int global_raym_retain_count_ = 0;
18 int global_raym_autorelease_count_ = 0;
19 int global_raym_release_count_ = 0;
20 DEFINE_STATIC_MUTEX(global_lock_);
25 DebugLog2("Object::Object()");
32 #ifdef RAYM_MEMORY_CHECK
35 // DebugLog0("C:0x%08x:%d", this, global_raym_count_);
36 global_lock_.unlock();
44 #ifdef RAYM_MEMORY_CHECK
46 // DebugLog0("D:0x%08x:%d", this, global_raym_count_);
48 global_lock_.unlock();
51 DebugLog2("Object::~Object()");
54 Object *Object::alloc()
56 DebugLog2("Object::alloc()");
61 Object *Object::init()
63 DebugLog2("Object::init()");
65 #ifdef RAYM_MEMORY_CHECK
67 ++global_raym_init_count_;
68 global_lock_.unlock();
74 Object *Object::retain()
76 DebugLog2("Object::retain()");
82 #ifdef RAYM_MEMORY_CHECK
84 ++global_raym_retain_count_;
85 global_lock_.unlock();
91 Object *Object::autorelease()
93 DebugLog2("Object::autorelease()");
95 #ifdef RAYM_MEMORY_CHECK
97 ++global_raym_autorelease_count_;
98 global_lock_.unlock();
101 AutoreleasePool::addObject(this);
105 Object *Object::autorelease(bool rootPool)
107 DebugLog2("Object::autorelease()");
109 #ifdef RAYM_MEMORY_CHECK
111 ++global_raym_autorelease_count_;
112 global_lock_.unlock();
115 AutoreleasePool::addObject(this, rootPool);
119 void Object::release()
121 DebugLog2("Object::release()");
123 #ifdef RAYM_MEMORY_CHECK
125 ++global_raym_release_count_;
126 global_lock_.unlock();
130 if (_retainCount > 0)
133 if (_retainCount == 0)
142 DebugLog0("object is already released. (0x%016lx)", this);
148 String *Object::description()
150 return String::stringWithFormat("<%s:0x%016lx>", className(), this);
153 const char *Object::className()