返回

多态实现多继承?设计模式如何运用?揭秘iPhone面试中的那些事儿(二)

IOS

多态性、设计模式和OC多继承:iOS面试中的常见问题

多态性

什么是多态性?

多态性是面向对象编程(OOP)中的一种强大特性,它允许我们使用同一界面处理不同类型的数据或对象。在iOS中,可以通过继承和方法重写来实现多态性。

实现多态性的代码示例:

class Animal {
    func speak() {
        print("Animal speaking")
    }
}

class Cat: Animal {
    override func speak() {
        print("Meow")
    }
}

class Dog: Animal {
    override func speak() {
        print("Woof")
    }
}

let animal: Animal = Cat()
animal.speak() // 输出:"Meow"

在上面的示例中,Animal类定义了一个名为speak的方法,该方法可以在子类(Cat和Dog)中被重写。当调用Animal对象的speak方法时,将根据对象的类型调用相应子类的重写方法。

OC类别

什么是OC类别?

OC类别是一种机制,允许我们向现有类添加方法和属性,而无需修改其源代码。它对于扩展类而不破坏其封装性非常有用。

创建OC类别的代码示例:

@interface NSString (MyCategory)
- (NSString *)uppercaseString;
@end

@implementation NSString (MyCategory)
- (NSString *)uppercaseString {
    return [self uppercaseString];
}
@end

在上面的示例中,我们为NSString类创建了一个类别,添加了一个名为uppercaseString的新方法。我们可以使用点语法(如[string uppercaseString])来调用这个方法。

OC协议

什么是OC协议?

OC协议是一种定义方法签名的机制,而不指定它们的实现。这对于创建可重用代码和松散耦合系统非常有用。

创建OC协议的代码示例:

@protocol Speakable
- (void)speak;
@end

@interface Cat: NSObject <Speakable>
- (void)speak;
@end

@implementation Cat
- (void)speak {
    NSLog(@"Meow");
}
@end

在上面的示例中,我们创建了一个Speakable协议,定义了一个speak方法。Cat类通过采用Speakable协议来实现speak方法。

OC多继承

什么是OC多继承?

与C++等其他OOP语言不同,OC不支持直接的多重继承。但是,它提供了类似多继承的效果,使用类别和协议。

实现OC多继承的代码示例:

@interface Person: NSObject
@end

@interface Employee: Person
@end

@interface Student: Person
@end

// 通过类别和协议,实现OC多继承
@interface Employee (StudentExtension) <Student>
@end

@implementation Employee (StudentExtension)
- (void)study {
    NSLog(@"Studying");
}
@end

在上面的示例中,我们使用类别和协议来实现Employee类和Student类的多重继承。Employee类扩展了Person类,而EmployeeExtension类别将Student协议添加到Employee类中。

设计模式

什么是设计模式?

设计模式是一组经过验证的解决方案,用于解决软件开发中常见的编程问题。它们提供了一种重用和共享最佳实践的方法。

常见的iOS设计模式:

  • 单例模式:确保只能创建一个类的实例。
  • 工厂模式:创建对象而不指定其确切类型。
  • 观察者模式:当一个对象发生变化时通知其他对象。

设计模式示例:

// 单例模式示例
class DatabaseConnection {
    static let shared = DatabaseConnection()
    private init() {}
}

// 工厂模式示例
enum ViewControllerType {
    case login, home
}

func createViewController(type: ViewControllerType) -> UIViewController {
    switch type {
        case .login: return LoginViewController()
        case .home: return HomeViewController()
    }
}

// 观察者模式示例
class Subject {
    var observers: [Observer] = []
    
    func addObserver(_ observer: Observer) {
        observers.append(observer)
    }
    
    func notifyObservers() {
        for observer in observers {
            observer.update()
        }
    }
}

class Observer {
    func update() {
        // 处理通知
    }
}

常见问题解答

1. 如何在OC中实现多重继承?
通过使用类别和协议。

2. 什么是OC类别?
允许我们向现有类添加方法和属性的机制。

3. 什么是OC协议?
定义方法签名的机制,而不指定它们的实现。

4. 什么是设计模式?
一组经过验证的解决方案,用于解决软件开发中的常见编程问题。

5. 多态性如何提高代码的可重用性?
通过允许我们使用同一界面处理不同类型的数据或对象。