I agree though a) I’m pretty sure this function was already there, and b) arrays allow simpler “stringification” via componentsJoinedByString:.
Because the number of protocols is probably too small to outweigh the cost of allocating a set from this array through faster membership checking, and this method isn’t performance critical to begin with, I’d stick with the array to keep the code (especially in line 175) simpler.