Sort of. "self" is refers to a specific instance of the subclass, not the subclass. There is a difference, as there are both class methods and instance methods.
This question touches on exactly what object oriented programming is, and that needs to be understood in order for this to really make sense.
A class is a blueprint, or a factory for an object, say a car (since we don't often build people in real life) It describes what the object is and can do. We ussually never see the code for the class, unless we write it ourselves. Instead we read the Apple docs.
A subclass would be a blueprint on how to build an object that is similar, or an extension of the super class. Lets say, a Corvette. Perhaps we did write the code for the subclass and Apple wrote the code for the car. This is true of nearly every class you write, which will inherit from NSObject at least, and maybe something else.
Now we build a Corvette. we use the init method. Init is a class method that the corvette factory knows how to do. Most likely, the corvette init method first calls the super init to build a basic car, then does it's own thing to customize it to make it a corvette.
now you have a corvette called my myCar. You could send it a message:
[myCar start];
or
[myCar rollUpWindows];
Lets say that the corvette has a feature that the windows roll up by themselves if the speed exceeds 65mph. Somewhere in the class implementation for the corvette there is code to check how fast the car is going, and if it is faster then 65:
[self rollUpWindows];
Get it? You have a corvette, and it is performing an action on itself. At the time the code is writen, it is in the class implementation. There are no corvettes, only the blueprints. So you can't say [myCar rollUpWindows]. My car hasn't been built yet. But, every corvette regardless of name will know how to roll it's own windows up. And the owner of the car doesn't send the message, the car sends the message to itself.
That might make sense now, but not really help you with your specific example and why you asked the question. That is also part of the OOP "idea".
Data encapsulation is the OOP idea that all data is encapsulated in an object. As a programer there is a layer of abstraction from it. Programs aren't cars and people, they deal with data, numbers, etc.
Say you have a document class. This class encasulates the data your program works with. That class has an array of records. Records themselves are objects that know how to do things. Maybe they update themselves with random numbers every hour, or maybe they change color. Abstraction prevents you from knowing or caring about all of that. All you know is that you work with the document.
You create an instance of the document class and are doing things with it. You could
[myDocument addRecord];
[myDocument print];
The addRecord method in the myDocument instance of the document class does it's thing to add the record to the data it stores, then while still in the addRecord method:
[self sortAllRecords];
I hope that makes sense. It's a quick summary of a broad topic that often lasts a couple semesters of study.