terface)通常存放在类似ClassName.h的文件中,定义实例变量(protected)和公用(public)方法。
类的实现存放在ClassName.m这样的文件中,它包含了这些方法的实际实现代码。它通常还定义了客户类不能访问的私有(private)实体变量、方法。
47、方法调用
调用对象的方法:
output = [object methodWithOutput];
output = [object methodWithInputAndOutput:input];
调用类的方法:(创建对象)
id myObject = [NSString string];
或
NSString* myString = [NSString string];
嵌套调用:
[NSString stringWithFormat:[prefs format]];
多输入参数:
声明:
-(BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile;
调用:
BOOL result = [myData writeToFile:@"/tmp/log.txt" atomically:NO];
48、访问器
点语法只能使用在设置器(setter)和获取器(getter)上,而不能用于普通方法。
setter
[photo setCation:@”Day at the Beach”];
output = [photo caption];
点操作符
photo.caption = @”Day at the Beach”;
output = photo.caption;
只有当访问器不存在的时候,@synthesize才会自动生成访问器,所以,即使是使用@synthesize声明了一个属性,你仍然可以实现自定义的getter和setter。编译器只会自动生成你没有自定义的方法。
49、创建对象
创建自动释放的对象
NSString* myString = [NSString string];
手工alloc创建
NSString* myString = [[NSString alloc] init];
注:[NSString alloc] 是NSString类本身的alloc方法调用。这是一个相对低层的调用,它的作用是分配内存及实例化一个对象。
[[NSString alloc] init] 调用新创建对象的init方法。init方法通常做对象的初始化设置工作,比如创建实例变量。
50、内存管理
//string1 将被自动释放
NSString* string1 = [NSString string];
//必须在用完后手工释放
NSString* string2 = [[NSString alloc] init];
[string2 release];
51、alloc
alloc方法调用,作用是分配内存及实例化一个对象。调用新创建对象的init方法,通常做对象的初始化设置工作,比如创建实例变量。
如果你通过手工alloc的方式创建一个对象,之后你需要release这个对象。同样,你也不能手工释放(release)一个能自动释放(autoreleased)的对象,因为这将会使你的应用程序崩溃。
52、IBOutlet、IBAction
如果你希望在Interface Builder中能看到这个控件对象,那么在定义的时候前面加上IBOutlet,在IB里就能看到这个对象的outlet,如果你希望在Interface Builder里控制某个对象执行某些动作,就在方法前面加上(IBAction)。
相关面试:
1、obj-c有多重继承么 不是的话有什么替代方法
cocoa中所有的类都是NSObject的子类 多继承在这里是用protocol委托代理来实现的 你不用去考虑繁琐的多继承,虚基类的概念. ood的多态特性 在obj-c中通过委托来实现.
2、obj-c有私有方法么 私有变量呢
objective-c -类里面的方法只有两种, 静态方法和实例方法. 这似乎就不是完整的面向对象了,按照OO的原则就是一个对象只暴露有用的东西.
如果没有了私有方法的话, 对于一些小范围的代码重用就不那么顺手了. 在类里面声名一个私有方法
@interface Controller :
NSObject { NSString *something; }
(void)thisIsAStaticMethod;
(void)thisIsAnInstanceMethod;
@end
@interface Controller
(private) - (void)thisIsAPrivateMethod;
@end
@private可以用来修饰私有变量 在Objective C中,所有实例变量默认都是私有的,所有实例方法默认都是公有的 。
3、c和obj-c如何混用
1、obj-c的编译器处理后缀为m的文件时,可以识别obj-c和c的代码,处理mm文件可以识别obj-c,c,c++代码,但cpp文件必须只能用c/c++代码,而且cpp文件include的头文件中,也不能出现obj-c的代码,因为cpp只是cpp 。
2、在mm文件中混用cpp直接使用即可,所以obj-c混cpp不是问题 。
3、在cpp中混用obj-c其实就是使用obj-c编写的模块是我们想要的。
4、目标-动作机制
目标是动作消息的接收者。一个控件,或者更为常见的是它的单元,以插座变量(参见"插座变量"部分) 的形式保有其动作消息的目标。 动作是控件发送给目标的消息,或者从目标的角度看,它是目标为了响应动作而实现的方法。 程序需要某些机制来进行事件和指令的翻译。这个机制就是目标-动作机制。
5、#import和#include的区别,@class代表什么?
@class一般用于头文件中需要声明该类的某个实例变量的时候用到,在m文件中还是需要使用#import而#import比起#include的好处就是不会引起重复包含。
6、谈谈Object-C的内存管理方式及过程?
1、当你使用new,alloc和copy方法创建一个对象时,该对象的保留计数器值为1.当你不再使用该对象时,你要负责向该对象发送一条release或autorelease消息.这样,该对象将在使用寿命结束时被销毁.
2、当你通过任何其他方法获得一个对象时,则假设该对象的保留计数器值为1,而且已经被设置为自动释放,你不需要执行任何操作来确保该对象被清理.如果你打算在一段时间内拥有该对象,则需要保留它并确保在操作完成时释放它.
3、如果你保留了某个对象,你需要(最终)释放或自动释放该对象.必须保持retain方法和release方法的使用次数相等.
7、内存管理 Autorelease、retain、copy、assign的set方法和含义?
1、你初始化(alloc/init)的对象,你需要释放(release)它。例如:
NSMutableArray aArray = [[NSArray alloc] init]; 后,需要 [aArray release];
2、你retain或copy的,你需要释放它。例如:
[aArray retain] 后,需要 [aArray release];
3、被传递(assign)的