It depends on what you want to do with the I/Os.

An RC network using the ADC or POT or RCTIME for inputs.

Outputs could be a "matrix" http://www.mackrackit.com/mac/www/dave/LED/LEDs.html

But shift registers are I think the best, they can be used for both in and out. Three pins from the PIC can be turned into eight outputs. Four pins can be turned into 16 outputs by sharing the clock an load pins on the registers.

Example for reading one register.
Code:
Clock   var PORTB.7

Load    var PORTB.6

Data_1  var PORTB.5

pulsout Load,1

shiftin Data_1,Clock,MSBPre,[keys]