NAME
dispatch_once —
execute a block only once
SYNOPSIS
#include
<dispatch/dispatch.h>
void
dispatch_once(dispatch_once_t
*predicate, void (^block)(void));
void
dispatch_once_f(dispatch_once_t
*predicate, void *context, void
(*function)(void *));
DESCRIPTION
The
dispatch_once()
function provides a simple and efficient mechanism to run an initializer
exactly once, similar to
pthread_once(3). Well designed code hides the use of lazy
initialization. For example:
FILE *getlogfile(void)
{
static dispatch_once_t pred;
static FILE *logfile;
dispatch_once(&pred, ^{
logfile = fopen(MY_LOG_FILE, "a");
});
return logfile;
}
SCOPE OF PREDICATE
The variable of type dispatch_once_t must have global or static scope. The result of using this type with automatic or dynamic allocation is undefined.
FUNDAMENTALS
The dispatch_once() function is a wrapper
around
dispatch_once_f().