Neste CGBitmapContextCreate, por que bytesPerRow é 0?

Notei no código de exemplo da Apple que eles geralmente fornecem um valor 0 no parâmetro bytesPerRow de CGBitmapContextCreate. Por exemplo, isso sai doReflexã projeto de amostra.

CGContextRef gradientBitmapContext = CGBitmapContextCreate(NULL, pixelsWide, pixelsHigh,  
                                                            8, 0, colorSpace, kCGImageAlphaNone);

Isso me pareceu estranho, já que sempre segui a rota de multiplicar a largura da imagem pelo número de bytes por pixel. Tentei trocar o zero pelo meu próprio código e testei-o. Com certeza, ainda funciona.

size_t bitsPerComponent = 8;
size_t bytesPerPixel = 4;
size_t bytesPerRow = reflectionWidth * bytesPerPixel;   

CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB();
CGContextRef context = CGBitmapContextCreate(NULL,
                                             reflectionWidth,
                                             reflectionHeight,
                                             bitsPerComponent,
                                             0, // bytesPerRow ??
                                             colorSpace,
                                             kCGImageAlphaPremultipliedLast);

De acordo com os documentos, bytesPerRow deve ser "O número de bytes de memória a serem usados por linha do bitmap"

Então, qual é o negócio? Quando posso fornecer um zero e quando devo calcular o valor exato? Há implicações no desempenho de fazê-lo de uma maneira ou de outra?

questionAnswers(1)

yourAnswerToTheQuestion