Well, first of all, -tableView:cellForRowAtIndexPath:
shouldn't be used to initiate any time consuming operations. To keep high performance, you should return prepared UITableViewCell from that method less then in 160ms or you will see "lag". This method will be called few times right after table has been shown (as many as you have cells with values).
You should use –scrollViewDidEndDragging:willDecelerate:
(with decelerate NO
) and –scrollViewDidEndDecelerating:
as appropriate place and time when you should initiate subscriptions to the channel and any other manipulation with PubNub client.
You can subscribe on all channels at once - it will be less network overhead than subscribing for every single channel one-by-one. If you want to preserve resources and keep pricing low by keeping client subscribed on few channels, than you should use same methods to unsubscribe from previous channels (same as were suggested to detect current cell and store current channel and so on).
Also just suggestion about how you feed cell with model: move model processing inside custom cell class (there is no reason for controller to know something about structure of cell's views and which data should be shown there).