就这么简单.
跑狮子.
已验证的编译器设置为"LLVM 4.0".
然后我做了相同的测试,但在XCode 4.4中创建了一个新项目,瞧!自动@synthesize在4.4项目中工作.
汽车@synthesize 也似乎对工作新添加到代码属性.但现有的旧版本会产生错误.
还有其他人经历过吗?还有其他我需要检查的东西吗?
我真的希望自动生成功能能够正常工作.
谢谢.
这是我经常遇到的一种情况,足以使样板代码浪费,而且我确信我不能成为唯一的代码.这是一个单一的,是否有更好的方法,或者我每次都必须这样做?
@interface SomeUIElement : UIView
@property CGFloat insetMargin; // <-- just an example of a UI parameter
@end
@implementation SomeElement
- (void)setInsetMargin:(CGFloat)insetMargin {
_insetMargin = insetMargin;
[self setNeedsDisplay]; // <-- the only thing that stops it being synthesized
}
@end
Run Code Online (Sandbox Code Playgroud)
现在这引发了一个编译警告,我没有一个getter,摆脱我可以添加
- (CGFloat)insetMargin {
return _insetMargin;
}
Run Code Online (Sandbox Code Playgroud)
但现在,它抱怨我没有ivar(因为定义的getter和setter意味着没有为我创建),所以我需要添加
@interface SomeUIElement () {
CGFloat _insetMargin;
}
Run Code Online (Sandbox Code Playgroud)
这意味着我们需要在属性发生变化时强制显示更新,这是一个巨大的开销.
有没有(a)某种方式告诉ObjC我确实打算为我创建getter和ivar,所以我只需要编写setter,或者(b)更好的方式来请求显示更新当属性相关时视觉外观变化?
Apple的SDK如何做到这一点(我假设我没有错过任何观看方式,比如UILabel来源)?
有没有可能的方法在窗体中创建一个for循环:
for i in 0 to some_var loop
// blah,blah
end loop;
Run Code Online (Sandbox Code Playgroud)
如果没有,有没有其他方法来创建相同的循环?由于While循环允许使用变量作为限制,但它们在我的项目中不可合成.
提前致谢,
Bojan Matovski
我有一个带有以下标题的类:
#import <Foundation/Foundation.h>
@interface CustomClass : NSObject
@property (strong, nonatomic) NSString *foo;
@end
Run Code Online (Sandbox Code Playgroud)
使用以下实现不会显示任何错误:
#import "CustomClass.h"
@implementation CustomClass
- (void) setFoo:(NSString *)foo {
_foo = foo;
}
@end
Run Code Online (Sandbox Code Playgroud)
作为Objective-C的完全初学者,当我在实现中添加以下方法时,我感到困惑:
- (NSString *)foo {
return _foo;
}
Run Code Online (Sandbox Code Playgroud)
因为现在方法中存在错误use of undeclared identifier 'title',它建议我更改_foo为foo.它不仅表示在新添加的方法中,它还在之前的setter方法中说明了它.我试图查看情况,但我没有找到满意的答复.相关问题请谈@synthesize,但我已经读到没有必要,所以我不确定问题是什么.
提前致谢!
-GoldDove
可以说我有一个简单的类,如下所示:
@interface A {
// @public
int var;
}
// @property(some_property) int var;
@end
Run Code Online (Sandbox Code Playgroud)
当我想访问变量var时,我有一些选择.如果我公开var,我可以这样做:
A objectA = [ [ A alloc ] init ];
NSLog( @"%d", objectA->var );
objectA->var = someNumber;
Run Code Online (Sandbox Code Playgroud)
如果我把它变成一个属性,我将不得不做更像这样的事情:
A objectA = [ [ A alloc ] init ];
NSLog( @"%d", objectA.var ); // dot-syntax
NSLog( @"%d", [ objectA var ] ); // get-syntax
[ objectA setVar: someNumber ];
Run Code Online (Sandbox Code Playgroud)
我已经尝试了两种并且它们工作正常但我的问题是使用旧式指针表示法来访问对象内部的变量有多危险?以后我是否需要担心我现在应该通过标准化我的方法访问来解决这个问题?或者我可以逃脱这样做但是我想要它只要有效吗?
我目前正在使用最新版本的Xcode(v5.0.2),我的应用程序的部署目标是iOS 7.0.
我的问题是,无论在哪个类中,我都可以在标题中设置属性
例如: @property (strong, nonatomic) NSString *firstName;
在实现文件中,我可以很好地合成它
例如: @synthesize firstName;
我的问题是我不能_firstName在代码中使用.我在其他项目中使用了自动ivars就好了(属性名称以下划线开头).
Xcode抱怨并告诉我将其更改为没有下划线的属性名称.我不明白为什么这个项目不会自动为我创建带有下划线的ivars.我知道在旧版本的Objective-C中,你必须自己做,但你不适用于iOS 7.
谢谢!
发布ObjectiveC初学者级别问题.当我使用属性声明对象时,我发现我们可以通过2种方法访问特定属性.
@property(nonatomic,retain) NSString *str;
Run Code Online (Sandbox Code Playgroud)
使用@synthesize propertyname
例如:
@synthesize str;
通过使用关键字self
例如:self.str;
那么这两种方法之间的区别是什么,哪种更合适.谢谢你的时间
抱歉标题不好,我不知道还有什么可以称之为这个问题.无论如何,假设我有以下内容:
@synthesize display = _display
Run Code Online (Sandbox Code Playgroud)
我的问题是display和_display有什么区别?每个都指的是什么?
为了澄清,我知道@synthesize做了什么(它创建了getter和setter),但我不确定display和_display所指的区别.
我精通java,所以只要有可能就把你的答案联系起来.
谢谢
在setProgram和setGraphic方法中我们有相同的代码:
NSLog(@"%@", self.display);
Run Code Online (Sandbox Code Playgroud)
但是,输出显示self.display是空的setProgram,但它是一个UILable对象中setGraphic.
是什么导致了不同的结果?display是IBOutlet并且program是NSArray对象.虽然program是SOGraphicViewController的模型,但我将从另一个控制器传递程序的值[segue.destinationViewController setProgram: self.brain.program].
@interface SOGraphicViewController ()
@property (nonatomic, weak) IBOutlet graphicView *graphic;
@end
@implementation SOGraphicViewController
@synthesize program = _program;
@synthesize graphic = _graphic;
@synthesize display = _display;
- (void)setProgram:(id)program {
_program = program;
[self.graphic setNeedsDisplay];
NSLog(@"%@", self.display);
}
- (void)setGraphic:(graphicView *)graphic {
_graphic = graphic;
self.graphic.dataSource = self;
NSLog(@"%@", self.display);
}
Run Code Online (Sandbox Code Playgroud) 我正在关注Joe Conway的Big Nerd Ranch iOS编程,当我看到以下代码时,我有点困惑.
WebViewController.h
#import <Foundation/Foundation.h>
@interface WebViewController : UIViewController
@property (nonatomic, readonly) UIWebView *webView;
@end
Run Code Online (Sandbox Code Playgroud)
WebViewController.m
#import "WebViewController.h"
@implementation WebViewController
- (void)loadView
{
// Create an instance of UIWebView as large as the screen
// Tell web view to scale web content to fit within bounds of webview
}
- (UIWebView *)webView
{
return (UIWebView *)[self view];
}
@end
Run Code Online (Sandbox Code Playgroud)
不应该合成.h文件中声明的属性吗?Xcode也没有给出警告(当我声明一个带有合成的属性时它通常会这样做).
顺便说一句,在书中,他也提到过
在WebViewController.h中,添加属性(但不是实例变量)
不声明属性会自动为您生成实例变量吗?让我知道我错过了什么.谢谢.
在我的代码中,我将使用一些寄存器来存储一些值以便在代码中做出决定.它们不直接从输入线获取值.现在,我得到......
信号已分配但从未使用过.在优化过程中将修剪此未连接的信号.
我应该忽略这个警告吗?我的模拟工作正常.
我是Objective-C语言的新手,我正在尝试理解基本概念.我来自Java语言,所以我已经知道OOP编程的原理.这是我写的代码.它很简单,但不能正常工作.我有一些问题使用@property和@synthesize
#import <Foundation/Foundation.h>
@interface Car: NSObject
@property(nonatomic,retain) NSString *brand;
@property int year;
@end //Car Interface
#import "Car.h"
@implementation Car
@synthesize brand;
@synthesize year;
@end //Car Implementation
#import "Car.h"
int main (int argc, const char * argv[])
{
int y;
//Creo un nuovo oggetto
Car *myCar = [[Car alloc] init];
//Setto i parametri
[myCar setbrand: @"BMW Z4"];
NSLog (@"Inserisci data modello: ");
scanf (" %i", &y); //E' buona norma lasciare uno spazio
[myCar setyear: y];
//Stampo a video …Run Code Online (Sandbox Code Playgroud) synthesize ×12
objective-c ×8
ios ×4
properties ×4
xcode ×2
for-loop ×1
fpga ×1
ios7 ×1
ivar ×1
loops ×1
methods ×1
pointers ×1
self ×1
uikit ×1
verilog ×1
vhdl ×1
vlsi ×1
while-loop ×1
xilinx ×1