@@ -368,17 +368,19 @@ return PRE_IVAR->retain_count; } - release { - if (!--PRE_IVAR->retain_count) - return [self free]; + if (!--PRE_IVAR->retain_count) { + [self dealloc]; + return nil; + } return self; } -- free +- (void)dealloc { void **iter = PRE_IVAR->memchunks + PRE_IVAR->memchunks_size; while (iter-- > PRE_IVAR->memchunks) free(*iter); @@ -385,8 +387,7 @@ if (PRE_IVAR->memchunks != NULL) free(PRE_IVAR->memchunks); free((char*)self - PRE_IVAR_ALIGN); - return nil; } @end