是否可以在 swift 项目中禁用方法调配?
Is it possible to disable method swizzling in a swift project?
我有一个带有第 3 方框架的非常大的项目,我想禁用方法调配以确保第 3 方框架不会破坏默认的预期行为。
可能吗?项目设置中是否有一些标志?
没有禁用它的选项,但如果您避免从 NSObject 子类化,您将是安全的。
如果你想防止 Any Library 混乱,你可以覆盖它的核心方法,即
public func class_addMethod(_ cls: Swift.AnyClass!, _ name: Selector!, _ imp: IMP!, _ types: UnsafePointer<Int8>!) -> Bool
和
public func method_exchangeImplementations(_ m1: Method!, _ m2: Method!)
像这样
public func method_exchangeImplementations(_ m1: Method!, _ m2: Method!) {
}
public func class_addMethod(_ cls: Swift.AnyClass!, _ name: Selector!, _ imp: IMP!, _ types: UnsafePointer<Int8>!) -> Bool
{
return false
}
虽然我不建议这样做,但您可以试一试。
我有一个带有第 3 方框架的非常大的项目,我想禁用方法调配以确保第 3 方框架不会破坏默认的预期行为。 可能吗?项目设置中是否有一些标志?
没有禁用它的选项,但如果您避免从 NSObject 子类化,您将是安全的。 如果你想防止 Any Library 混乱,你可以覆盖它的核心方法,即
public func class_addMethod(_ cls: Swift.AnyClass!, _ name: Selector!, _ imp: IMP!, _ types: UnsafePointer<Int8>!) -> Bool
和
public func method_exchangeImplementations(_ m1: Method!, _ m2: Method!)
像这样
public func method_exchangeImplementations(_ m1: Method!, _ m2: Method!) {
}
public func class_addMethod(_ cls: Swift.AnyClass!, _ name: Selector!, _ imp: IMP!, _ types: UnsafePointer<Int8>!) -> Bool
{
return false
}
虽然我不建议这样做,但您可以试一试。