@interface MyTest : NSObject{
NSString * _testName;
}
- (void) initName:(NSString *) newName;
@end
@interface MyTest告诉编译器这是一个新类“MyTest”的接口,而NSObject则表示每个MyTest类都是一个NSObject,并且每个类都将继承NSObject类的所有行为。
大括号中内容就是这个MyTest类中的元素。也就是这个类的数据成员。testName也称为MyTest类的实例变量。接下来-(void) initName:(NSString *)newName; 这看起来有点像C++中的函数原型,在objective-C中我们称为方法声明. 它列出了每个方法的名称,返回值的类型,跟参数。
- (void) initName:(NSString *)newName;
“-” 是Objective-C 方法的声明 也有“+” 那么“-”,“+”是什么意思,如果学过C++就会知道在C++中有个static方法(静态方法)。这个“+”号代表的意思就跟C++中静态方法是一样的。(void)代表的就是函数的返回值, initName就代表着这个函数的名字 ,冒号后面就是要传入的参数。(NSString*)就代表着你要传入的参数是一个字符串 。
在Objective-C中有一种名为“中缀符”的语法方式。方法的名称及其参数都是合在一起的。例如:
[MyTest initName:@“xiaobai”];</span>
但是需要注意的是“:”的使用,如果你的方法是不带参数的那么不需要冒号,反之需要。很有可能我们在写程序的时候因为这一个冒号而绞尽脑汁。
@end 告诉编译器我们完成了这个类的声明。
@interface部分是用于定义类的公共接口。通常接口也叫API。
.m文件
@interface MyTest()
@property (strong)NSString *sex;
@end
@implementation MyTest
-(void) initName : (NSString *)newName{
_testName = newName;
}<pre name="code" class="objc">@interface MyTest : NSObject{
NSString * test;
}
@propery (nonatomic, copy) NSString *test;
@end
@implementation MyTest
@synthe test;
@end;
-(void) initName : (NSString *)newSex{ _sex = newSex;}@end
@interface部分我们叫接口,而真正使对象能够运行的代码位于.m文件中。
@implementation 是一个编译器命令表明你将要为这个类提供代码。类名出线在@implement之后。
接下来我们要实现.h文件中的方法,甚至我们可以定义并实现那些@interface中没有实现过的方法。那么那些没有在@interface时给谁用的呢。在c++中有私有方法跟保护方法你可以理解为在@interface中的是公共的而在@imolementation定义的变量跟方法则是私有的。也就是说.h中的变量跟方法任何人都可以使用,而在.m文件中只能是自己来使用。
下划线"_"与self
第一种形式
@interface MyTest : NSObject{
NSString * _test;
}
@propery (nonatomic, copy) NSString *test;
@end
@implementation MyTest
@synthesize test = _test;
@end;
第二种形式
@interface MyTest : NSObject
@propery (nonatomic, copy) NSString *test;
@end
关于@synthesize在上篇博客中已经说了,那么久在复习一遍顺便在加一点这俩天一些新感悟。
- 在没有引进arc以前我们需要使用@synthesize test;系统将不会自动生成实例变量“_test”,直接通过变量名test,也就是直接使用变量名在赋值运算的时候,只是将内存区域的指针复制给变量,相当于assgin。如果是通过点语法“self.test=”则是走属性生成方法,也就是在@property中定义的属性。如果没有属性则默认是assgin。
- 如果没有写@synthesize,系统会自动生成一个默认的加“_”的成员变量(即使是变量名中已经有一个“_”);
- @synthesize 以前可能都看到过 @syjnthesize test = _test; @synthsize test; 可能也会有像我一样刚入门没有接触过的,那么我感觉以后我们只需要只需要尽量去使用属性变量就可以,因为系统会为我们做好一切。
- 也许大家也可能看见过这样的代码
那究竟有什么区别也就是第一条所说的self.btn1 走的是属性方法,但是走的是什么属性方法还是要看自己定义的属性。而_btn则是直接调用变量名为_btn1的指针队成员变量直接赋值相当于assgin。<span style="font-size:14px;">self.btn1 =[[UIButton alloc] init]; _btn1 = [[UIButton aaloc] init]; </span><span style="font-size:12px;"> </span>
- 对于大括号里的成员变量我们可以用self->_test来调用。(但是我没见过这么来用的)。