mirror of
https://github.com/adambard/learnxinyminutes-docs.git
synced 2024-12-23 17:41:41 +00:00
Add description and example of how to simulate protected methods.
This commit is contained in:
parent
e3b20c7e26
commit
e3853e564b
@ -430,7 +430,12 @@ distance = 18; // References "long distance" from MyClass implementation
|
|||||||
return @42;
|
return @42;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
<<<<<<< HEAD
|
||||||
// To create a private method, create the method in the @implementation but not in the @interface
|
// To create a private method, create the method in the @implementation but not in the @interface
|
||||||
|
=======
|
||||||
|
// Objective-C does not have private method declarations, but you can simulate them.
|
||||||
|
// To simulate a private method, create the method in the @implementation but not in the @interface.
|
||||||
|
>>>>>>> 421f48c... Add description and example of how to simulate protected methods.
|
||||||
- (NSNumber *)secretPrivateMethod {
|
- (NSNumber *)secretPrivateMethod {
|
||||||
return @72;
|
return @72;
|
||||||
}
|
}
|
||||||
@ -485,11 +490,11 @@ distance = 18; // References "long distance" from MyClass implementation
|
|||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
// Now, if we wanted to create a Truck object, we would create a subclass of Car instead as it would
|
// Now, if we wanted to create a Truck object, we would instead create a subclass of Car as it would
|
||||||
// be changing the functionality of the Car to behave like a truck. But lets say we want to just add
|
// be changing the functionality of the Car to behave like a truck. But lets say we want to just add
|
||||||
// functionality to this existing Car. A good example would be to clean the car. So we would create
|
// functionality to this existing Car. A good example would be to clean the car. So we would create
|
||||||
// a category to add these cleaning methods:
|
// a category to add these cleaning methods:
|
||||||
// @interface filename: Car+Clean.h
|
// @interface filename: Car+Clean.h (BaseClassName+CategoryName.h)
|
||||||
#import "Car.h" // Make sure to import base class to extend.
|
#import "Car.h" // Make sure to import base class to extend.
|
||||||
|
|
||||||
@interface Car (Clean) // The category name is inside () following the name of the base class.
|
@interface Car (Clean) // The category name is inside () following the name of the base class.
|
||||||
@ -499,8 +504,8 @@ distance = 18; // References "long distance" from MyClass implementation
|
|||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
// @implementation filename: Car+Clean.m
|
// @implementation filename: Car+Clean.m (BaseClassName+CategoryName.m)
|
||||||
#import "Car+Clean.h"
|
#import "Car+Clean.h" // Import the Clean category's @interface file.
|
||||||
|
|
||||||
@implementation Car (Clean)
|
@implementation Car (Clean)
|
||||||
|
|
||||||
@ -511,13 +516,13 @@ distance = 18; // References "long distance" from MyClass implementation
|
|||||||
NSLog(@"Waxed.");
|
NSLog(@"Waxed.");
|
||||||
}
|
}
|
||||||
|
|
||||||
@end
|
@end
|
||||||
|
|
||||||
// Any Car object instance has the ability to use a category. All they need to do is import it:
|
// Any Car object instance has the ability to use a category. All they need to do is import it:
|
||||||
#import "Car+Clean.h" // Import as many different categories as you want to use.
|
#import "Car+Clean.h" // Import as many different categories as you want to use.
|
||||||
#import "Car.h" // Also need to import base class to use it's original functionality.
|
#import "Car.h" // Also need to import base class to use it's original functionality.
|
||||||
|
|
||||||
int main(int argc, const char *argv[]) {
|
int main (int argc, const char * argv[]) {
|
||||||
@autoreleasepool {
|
@autoreleasepool {
|
||||||
Car *mustang = [[Car alloc] init];
|
Car *mustang = [[Car alloc] init];
|
||||||
mustang.color = @"Red";
|
mustang.color = @"Red";
|
||||||
@ -529,6 +534,24 @@ int main(int argc, const char *argv[]) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Objective-C does not have protected method declarations but you can simulate them.
|
||||||
|
// Create a category containing all of the protected methods, then import it ONLY into the
|
||||||
|
// @implementation file of a class belonging to the Car class:
|
||||||
|
@interface Car (Protected) // Naming category 'Protected' to remember methods are protected.
|
||||||
|
|
||||||
|
- (void)lockCar; // Methods listed here may only be created by Car objects.
|
||||||
|
|
||||||
|
@end
|
||||||
|
//To use protected methods, import the category, then implement the methods:
|
||||||
|
#import "Car+Protected.h" // Remember, import in the @implementation file only.
|
||||||
|
|
||||||
|
@implementation Car
|
||||||
|
|
||||||
|
- (void)lockCar {
|
||||||
|
NSLog(@"Car locked."); // Instances of Car can't use lockCar because it's not in the @interface.
|
||||||
|
}
|
||||||
|
|
||||||
|
@end
|
||||||
|
|
||||||
// Protocols
|
// Protocols
|
||||||
// A protocol declares methods that can be implemented by any class.
|
// A protocol declares methods that can be implemented by any class.
|
||||||
|
Loading…
Reference in New Issue
Block a user