mirror of
https://github.com/gnustep/libs-base.git
synced 2025-05-30 16:30:41 +00:00
(_safeWithElementsCallNoRetain:): New method.
(dealloc, empty): Use it. (send_release): New function. git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@279 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
515d48912a
commit
d03e3c0a1d
1 changed files with 22 additions and 4 deletions
|
@ -65,11 +65,30 @@
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
- (void) _safeWithElementsCallNoRetain: (void(*)(elt))aFunc
|
||||||
|
{
|
||||||
|
int c = [self count];
|
||||||
|
elt *elts = (elt*) alloca(c * sizeof(elt));
|
||||||
|
int i = 0;
|
||||||
|
void fill_elts(elt e)
|
||||||
|
{
|
||||||
|
elts[i++] = e;
|
||||||
|
}
|
||||||
|
[self withElementsCall:fill_elts];
|
||||||
|
for (i = 0; i < c; i++)
|
||||||
|
aFunc(elts[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
send_release(elt e)
|
||||||
|
{
|
||||||
|
[e.id_u release];
|
||||||
|
}
|
||||||
|
|
||||||
- (void) dealloc
|
- (void) dealloc
|
||||||
{
|
{
|
||||||
if (CONTAINS_OBJECTS)
|
if (CONTAINS_OBJECTS)
|
||||||
[self makeObjectsPerform:@selector(release)];
|
[self _safeWithElementsCallNoRetain:send_release];
|
||||||
/* xxx This used to be "safeMakeObjectsPerform:" */
|
|
||||||
[self _collectionDealloc];
|
[self _collectionDealloc];
|
||||||
[super dealloc];
|
[super dealloc];
|
||||||
}
|
}
|
||||||
|
@ -78,8 +97,7 @@
|
||||||
- empty
|
- empty
|
||||||
{
|
{
|
||||||
if (CONTAINS_OBJECTS)
|
if (CONTAINS_OBJECTS)
|
||||||
[self makeObjectsPerform:@selector(release)];
|
[self _safeWithElementsCallNoRetain:send_release];
|
||||||
/* xxx This used to be "safeMakeObjectsPerform:" */
|
|
||||||
[self _empty];
|
[self _empty];
|
||||||
return self;
|
return self;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue