一些iOS杂技术

这里会记录一些没用的iOS技术,但或许会是有趣的。

1.关于向前声明

为避免循环引用,C 语言有一个前向声明的机制,即仅仅告诉存在性,而不理会具体实现。C++ 使用 class 关键字实现前向声明。在 Objective-C 中则是使用@class关键字

用clang -rewrite-objc 查看后发现 OC语法解析后的C++代码并非使用class来前置声明一个类,而是 typedef struct objc_object Son;这种方式来声明Son类。所以我们完全可以用typedef struct objc_object MyClass;来代替@class.可是并不会有人这样做。

2.关于Objective-C 访问权限的一些事

在 Objective-C 中,只有成员数据可以是private,protected和public的,默认是protected。方法只能是public的。实际上在头文件声明一个方法和.m中是一样的,.m中使用分类机制(class categories)声明方法,虽然暂时隐藏方法,但是得益于 Objective-C 的动态性,我们可以用performSelector:

    Foo *foo = [Foo new];
    [foo performSelector:NSSelectorFromString(@"apple")];
    ////////////////////////////////////////////////////////////////////////////////////////
    @implementation Foo

    -(int) apple{
       return 10;
     }

你可能感兴趣的:(一些iOS杂技术)