I'm not a huge fan of iterating subviews like this. What if two lines accidentally have the same tag? Or the improbable case of a hundred or more lines? Neither case is likely, but, maybe a NSMapTable of weak pointers where key = @(tag) and value = layer instead?