iosは深く勉強する(一).m和hファイル
2147 ワード
.h
新しいプロジェクトを作成します.hファイルには次のように表示されます.
.hファイルは他のclassに呼び出され、@interfaceキーワードに明記されたメンバーの属性と方法は外部に見られる.
#import
1.import""および#import<>
2.importとinclude
#includeはcにヘッダファイルを導入する方法でocで同様に使用できるが、両者の違いは:#includeと複数回同じファイルでエラーが報告される.
3.@classキーワード
ocでは#importと@classが別のタイプを参照できますが、両者の違いは次のとおりです.
もちろん@classキーワードの役割はこれだけではありません.比較#importには他の役割もあります.【1】コンパイル効率の面で、100個のヘッダファイルが同じヘッダファイルを持っている場合、またはこれらのファイルがA->B、B->C、C->Dのような参照関係で順次参照されている場合.最初のヘッダファイルが変更されると、後で参照するすべてのクラスが再コンパイルされ、クラスがたくさんあれば、多くの時間がかかります.@classではできません.【2】循環依存関係、例えば:A->B,B->Aのような相互依存関係がある場合、#importを使用して相互に含めるとコンパイルエラーが発生し、@classを使用して2つのクラスのヘッダファイルで相互に宣言するとコンパイルエラーは発生しない.
したがって、一般的に@classはinterfaceに置かれていますが、interfaceでこのクラスを参照するために、このクラスを1つのタイプとして使用しています.このインタフェースを実装実装実装クラスでは、このクラスのエンティティ変数やメソッドなどを参照する必要があるか、@classでimportが宣言するクラスが必要かのいずれかである.
4. @interface
@interfaceはocのクラスの基本的な構成部分であり、クラスの深さは後ろに置かれます.
.m
1. @interface className()
ここの@interface className()はクラスへの拡張であり、宣言されたメンバーは、外部からアクセスできないし、クラスに継承されない.
2. @implementation
@implementationでのメソッドは継承や外部アクセスはできません.ここでの-(void)viewDidLoadメソッドは親用インタフェースを実装し,インタフェースは継承されるので,このメソッドを継承することができる.
以上、不足点や間違い点がありましたら、ご指摘ください.
新しいプロジェクトを作成します.hファイルには次のように表示されます.
#import
@interface ViewController : UIViewController
@end
.hファイルは他のclassに呼び出され、@interfaceキーワードに明記されたメンバーの属性と方法は外部に見られる.
#import
1.import""および#import<>
#import"" //
#import<> //
2.importとinclude
#includeはcにヘッダファイルを導入する方法でocで同様に使用できるが、両者の違いは:#includeと複数回同じファイルでエラーが報告される.
#include // , , 。
#import // , 。
3.@classキーワード
ocでは#importと@classが別のタイプを参照できますが、両者の違いは次のとおりです.
@class someClass // someClass ,
someClass 。
someClass ,
someClass 。
。
@implementation , #import"someClass.h"
もちろん@classキーワードの役割はこれだけではありません.比較#importには他の役割もあります.【1】コンパイル効率の面で、100個のヘッダファイルが同じヘッダファイルを持っている場合、またはこれらのファイルがA->B、B->C、C->Dのような参照関係で順次参照されている場合.最初のヘッダファイルが変更されると、後で参照するすべてのクラスが再コンパイルされ、クラスがたくさんあれば、多くの時間がかかります.@classではできません.【2】循環依存関係、例えば:A->B,B->Aのような相互依存関係がある場合、#importを使用して相互に含めるとコンパイルエラーが発生し、@classを使用して2つのクラスのヘッダファイルで相互に宣言するとコンパイルエラーは発生しない.
したがって、一般的に@classはinterfaceに置かれていますが、interfaceでこのクラスを参照するために、このクラスを1つのタイプとして使用しています.このインタフェースを実装実装実装クラスでは、このクラスのエンティティ変数やメソッドなどを参照する必要があるか、@classでimportが宣言するクラスが必要かのいずれかである.
4. @interface
@interfaceはocのクラスの基本的な構成部分であり、クラスの深さは後ろに置かれます.
.m
#import "ViewController.h"
@interface ViewController ()
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
@end
1. @interface className()
ここの@interface className()はクラスへの拡張であり、宣言されたメンバーは、外部からアクセスできないし、クラスに継承されない.
2. @implementation
@implementationでのメソッドは継承や外部アクセスはできません.ここでの-(void)viewDidLoadメソッドは親用インタフェースを実装し,インタフェースは継承されるので,このメソッドを継承することができる.
以上、不足点や間違い点がありましたら、ご指摘ください.