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()");
31 #ifdef RAYM_MEMORY_CHECK
34 // DebugLog0("C:0x%08x:%d", this, global_raym_count_);
35 global_lock_.unlock();
43 #ifdef RAYM_MEMORY_CHECK
45 // DebugLog0("D:0x%08x:%d", this, global_raym_count_);
47 global_lock_.unlock();
50 DebugLog2("Object::~Object()");
53 Object *Object::alloc()
55 DebugLog2("Object::alloc()");
60 Object *Object::init()
62 DebugLog2("Object::init()");
64 #ifdef RAYM_MEMORY_CHECK
66 ++global_raym_init_count_;
67 global_lock_.unlock();
73 Object *Object::retain()
75 DebugLog2("Object::retain()");
81 #ifdef RAYM_MEMORY_CHECK
83 ++global_raym_retain_count_;
84 global_lock_.unlock();
90 Object *Object::autorelease()
92 DebugLog2("Object::autorelease()");
94 #ifdef RAYM_MEMORY_CHECK
96 ++global_raym_autorelease_count_;
97 global_lock_.unlock();
100 AutoreleasePool::addObject(this);
104 Object *Object::autorelease(bool rootPool)
106 DebugLog2("Object::autorelease()");
108 #ifdef RAYM_MEMORY_CHECK
110 ++global_raym_autorelease_count_;
111 global_lock_.unlock();
114 AutoreleasePool::addObject(this, rootPool);
118 void Object::release()
120 DebugLog2("Object::release()");
122 #ifdef RAYM_MEMORY_CHECK
124 ++global_raym_release_count_;
125 global_lock_.unlock();
129 if (_retainCount > 0)
132 if (_retainCount == 0)
141 DebugLog0("object is already released. (0x%016lx)", this);
147 String *Object::description()
149 return String::stringWithFormat("<%s:0x%016lx>", className(), this);
152 const char *Object::className()