The logic is wrong, but the algorithm is O(n). For every step there's only a constant amount of operations.
The logic error is that when you replace the number in some spot, you need to push the previous values downward, e.g.
if([self.top1 intValue] < [num intValue]){
self.top4 = self.top3;
self.top3 = self.top2;
self.top2 = self.top1;
self.top1 = num;
continue;
}