0

スペースを割り当てずに NSString 型のプロパティを作成し、値を割り当てると、機能します。UITextField に対して同じことを行うと、そうではありません..? プログラムでテキストフィールドを作成しています....どんな助けでも大歓迎です。

編集:

SecondViewController の .h に 2 つのプロパティを作成しました...

@property (nonatomic,retain) NSString *text;
@property (nonatomic, retain) UITextField *textField;

ここで、新しいオブジェクト secondViewController を作成して、これを行うと言うと...

   secondViewController.text=@"Second View Controller";

この値は、メモリを割り当てていなくても保持されます...

そして、テキストフィールドオブジェクトに対して同じことをしようとすると、メモリを割り当てない限り、これは起こりません..

ここに私のSecondViewControllerがあります...

//
//  SecondViewController.m
//  Tester
//
//  Created by Ankit on 4/16/12.
//  Copyright (c) 2012 __MyCompanyName__. All rights reserved.
//

#import "SecondViewController.h"

@implementation SecondViewController
@synthesize  text,textField;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)didReceiveMemoryWarning
{
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

    // Release any cached data, images, etc that aren't in use.
}

#pragma mark - View lifecycle

- (void)viewDidLoad
{
    [super viewDidLoad];
    NSLog(@"The text is %@",text);

//   textField = [[UITextField alloc] initWithFrame:CGRectMake(10, 200, 300, 40)]; (if I `uncomment this than only this textField is visible)`
    textField.frame=CGRectMake(10, 200, 300, 40);
    textField.borderStyle = UITextBorderStyleRoundedRect;
    textField.font = [UIFont systemFontOfSize:15];
    textField.placeholder = @"enter text";
    textField.autocorrectionType = UITextAutocorrectionTypeNo;
    textField.keyboardType = UIKeyboardTypeDefault;
    textField.returnKeyType = UIReturnKeyDone;
    textField.clearButtonMode = UITextFieldViewModeWhileEditing;
    textField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;    
    [self.view addSubview:textField];

//    textfield=[[UITextField alloc] init];
//    textfield.frame=CGRectMake(10,10,60, 30);
//    [self.view addSubview:textfield];
    // Do any additional setup after loading the view from its nib.
}

- (void)viewDidUnload
{
    [super viewDidUnload];
    self.text=nil;
    self.textField=nil;
    NSLog(@"viewDidUnLoad");
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}
-(void)dealloc{
    NSLog(@"dealloc");
    [text release];
    [textField release];
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    // Return YES for supported orientations
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

@end
4

3 に答える 3

1

プロパティはオブジェクトへの単なる参照であり、「スペース」は別の場所から取得する必要があります。NSString との唯一の実際の違いは、スペースが多くの場合リテラルの形式であるため、割り当てが直接表示されないことです。@"Hello" は参照できる実際のオブジェクトですが、それ以外の場合は、[[UITextField alloc] init...] 構造と同じ [[NSString alloc] init...] 構造を使用します。

于 2012-04-16T12:47:13.650 に答える
1

NSString特別なオブジェクトです。UITextFieldが他の多くのものの上に構築されているのとは異なり、@あなたが見た文字は、これがNSString. つまり、コンパイラが割り当てと初期化を行っています。それがすることはほとんど[[NSString alloc] initWithCString:"your string"]です。このコードは、時間を節約するために簡略化されています。

Stringは実際には のようなプリミティブ データ型ではありませんint。コンパイラは、配列またはメモリ バッファと同じように扱います。しかし、人々はそれをプリミティブ データ型として使用する傾向があります。したがって、同様の特別な扱いが多くのプログラミング言語で行われています。

UITextFieldデータ型に似たものは何もありません。それはオブジェクトであり、重量級です。コンパイラは、オブジェクトであることを除いて、その性質についてあまり知りませんでした。そして、このように構文を最適化することはあまり意味がありません (つまり、できるということです)。それで、あなたが見た行動に終わりました。

于 2012-04-16T12:56:09.943 に答える
0

NSStringには便利なマクロが組み込まれていますNSString *bob = @"bob";

現在、この正確な表記法を持つクラスは他にありません (Array Dictionary と Set はすぐに取得できます)。

UITextField を使用するには、適切に行う必要があります

UITextField *tf = [[UITextField alloc]init]

そして電話するtf.text = @"";

編集: これ=@""は、alloc と init を使用して新しい文字列を作成するための単なるラッパーです。それはそれを隠すだけです:)

于 2012-04-16T12:50:41.640 に答える