I have quite a few friends that are learning Objective-C, and they are doing quite well :), but one hang up that most of them seem to be having is with pointers - mostly just the general concept.
It’s not a surprise. If you are coming from a high level language, pointers don’t exist much in your day to day world. In fact, from what I have heard there are quite a few professional C/C++ coders that hate pointers and avoid them like the plague. So don’t feel bad if you don’t get them right off.
I learned pointers from an incredibly smart NASA coder - you know who you are ;) - and the way he taught them to me made it cake to learn. I’ve been trying to explain it in IM and I can’t seem to do it, so I will attempt to pass on the knowledge here the way I was taught.
For simplicity, I’ll do it in C with integers, but the same basic concept holds true for objects and complex types.

The figure above is the base of what we’ll use to talk about pointers. It is a picture of some pretend memory in your computer. Each box (or section of memory) has an address and an area to hold something. Here we have four boxes and as a result four address’.

In our first simple program, you can see the steps of assigning some variables and putting values in the variables - dropping things in the boxes.
In the first line it gets a box (int x) and puts a value in the box (12). The address of the box just gets assigned to the program automatically.
In the second line we again reserve a box. However, the third line is where it gets interesting. When we assign x to y we copy the contents of box one into box two. We now have two 12s in memory in two boxes (memory address’). One in the box at address 0×0008 and one in the address 0×0016.

Here is where pointers come in. Our first line is the same as the last - we put 12 into box one. But now in the next line we are reserving an address not another box. In the last example you would say “y is of type integer”, and in this example you would say “y is of type pointer to integer”.
Now the third line is where the magic happens. The & (in this context) means “get the address of…” and assign that address to our “pointer to integer” type. I put the printf there so if you want you can run the example and see that both values do indeed have the same address (and of course the same value).
So pointers are address’ in memory.
To bring this back to the Objective-C thing from the IM… You can use pointers to get to data and objects, but they are not themselves objects or data so:
NSMutableArray * myArray;
myArray is of type “pointer to NSMutableArray” - it is not an NSMutableArray itself. When you do:
myArray = [[NSMutableArray alloc] init];
you are asking NSMutableArray to get you an address of a real live NSMutableArray which you can then use with your myArray pointer (well asking NSMutableArray to allocate memory, create an instance, then pass you back the address of the instance).
I hope this didn’t make it worse :-/