//7-9
静态方法调用普通方法会出错,调用静态方法没有问题
需要注意的是 performSelector: 这个方法看起来是普通方法,- (id)performSelector:(SEL)aSelector;
但是可以在静态方法中调用
+ (void)testStatic
{
NSLog(@"testStatic");
//this can run rightly
[NetManager performSelector:@selector(testStatic2)];
//this will crash
[NetManager testNormal];
}
+ (void)testStatic2
{
NSLog(@"testStatic22222");
}
- (void)testNormal
{
NSLog(@"testNormal");
}
2012-07-09 16:32:54.558 test[59696:10a03] testStatic
2012-07-09 16:32:55.644 test[59696:10a03] testStatic22222
2012-07-09 16:33:16.581 test[59696:10a03] +[NetManager testNormal]: unrecognized selector sent to class 0x5f4c40
2012-07-09 16:33:16.676 test[59696:10a03]
+ (NSArray *)testPret
函数声明和定义的返回值类型不一样还是可以调用的,如果声明不是id类型的,会有告警
nodesForXPath根据路径获取结点
NSError *error = nil;
GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithXMLString:xmlString
options:0
error:&error];
NSString * from = nil;
NSArray* froms = [doc nodesForXPath:@"/country/city" error:nil];
if ([froms count] > 0)
{
from = [[froms objectAtIndex:0] stringValue];
}
NSString * auth = nil;
NSArray* auths = [doc nodesForXPath:@"/country/city/zone" error:nil];
if ([auths count] > 0)
{
auth = [[auths objectAtIndex:0] stringValue];
}
extern void printLog (NSUInteger DebugLevel, NSString * format, ...);
[NSBundle mainBundle]得到的是程序包路径,如 /Users/userName/Library/Application Support/iPhone Simulator/4.2/Applications/BE308073-FA13-49B3-AF6D-2591AF165E07/test.app
NSString *fileName = [NSString stringWithFormat:@"%@_x", imageId];
filePath = [[NSBundle mainBundle] pathForResource:fileName
ofType:@"png"];
if (filePath != nil)
{
UIImage *pImage = [[UIImage alloc] initWithContentsOfFile:filePath];
return pImage;
}
使用initWithContentsOfFile:filePath 方法从bundle中加载图片,可以release image变量
[[UIImage alloc] initWithContentsOfFile:filePath];
据说
+ (UIImage *)imageNamed:(NSString *)name;的autorelease在程序结束的时候才会执行
---
测试autorelease的释放情况,value = [NetResponseManager reponseOfGetPortrait:xml];
函数返回值是一个autorelease对象,函数中生成的,当退出调用函数的时候,对象的dealloc方法被调用
7-12
reqData.contentIDs 为nil, i < [reqData.contentIDs count] 不成立,没有进入循环
[reqData.contentIDs count] 的值为0
for (int i = 0; i < [reqData.contentIDs count]; i++)
{
GDataXMLElement * tmpElement = [GDataXMLElement elementWithName:@"ID"
stringValue:[reqData.contentIDs objectAtIndex:i]];
[contentIDsElement addChild:tmpElement];
}
(gdb) po [reqData.contentIDs count]
Can't print the description of a NIL object.
(gdb) po nil
0x1374420 does not appear to point to a valid object.
(gdb) po [NSString stringWithFormat: @"99%d77", [reqData.contentIDs count]]
99077
(gdb)
//test array
NSMutableArray * muArray = [[[NSMutableArray alloc] init] autorelease];
NSString * p1 = @"1";
NSString * p2 = @"2";
NSString * p3 = @"3";
[muArray addObject:p1];
[muArray addObject:p2];
[muArray addObject:p3];
//数组里存放的是指针(被指向对象的地址),以下操作不会改变数组的内容
p1 = @"111";
p2 = nil;
NSString * pstr = [muArray objectAtIndex:1];
//
- (int)test;可以使用点. 操作符去调用 int i = data.test; 这样是没有问题的
data.test = 3;
必须要在头文件中声明,不然编译报错